我知道如何检测我的 Python 脚本stdout
是否被重定向(>
)使用sys.stdout.isatty()
,但是有没有办法发现它被重定向到什么?
例如:
python my.py > somefile.txt
有没有办法somefile.txt
在 Windows 和 Linux 上发现这个名字?
我知道如何检测我的 Python 脚本stdout
是否被重定向(>
)使用sys.stdout.isatty()
,但是有没有办法发现它被重定向到什么?
例如:
python my.py > somefile.txt
有没有办法somefile.txt
在 Windows 和 Linux 上发现这个名字?
我怀疑你可以以独立于系统的方式做到这一点。在 Linux 上,以下工作:
import os
my_output_file = os.readlink('/proc/%d/fd/1' % os.getpid())
如果您需要一种独立于平台的方式来获取文件名,请将其作为参数传递并使用 argparse(或 optparse)来读取您的参数,根本不要依赖 shell 重定向。
与代码一起使用python my.py --output somefile.txt
,例如:
parser = argparse.ArgumentParser()
parser.add_argument('--output', # nargs='?', default=sys.stdout,
type=argparse.FileType('w'),
help="write the output to FILE",
metavar="FILE")
args = parser.parse_args()
filename = args.output.name
如果知道名称是可选的并且用于一些奇怪的优化,则使用 Igor Nazarenko 的解决方案并检查是否sys.platform
为'linux2'
,否则假设您没有名称并将其视为普通管道。