有没有办法在Python中找出stdout重定向到哪个文件的名称
我知道怎么判断我的Python脚本的输出(stdout
)是否被重定向了(比如用>
符号),可以通过sys.stdout.isatty()
来实现。但是有没有办法知道它被重定向到了哪里呢?
举个例子:
python my.py > somefile.txt
有没有办法在Windows和Linux上都找到这个文件的名字,比如somefile.txt
?
2 个回答
1
如果你想要一个不依赖于平台的方法来获取文件名,可以把文件名作为参数传递,然后使用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'
,如果不是,就假设你没有文件名,把它当作普通的管道来处理。
10
我怀疑你能否以一种不依赖于系统的方式做到这一点。在Linux系统上,下面的代码是可以运行的:
import os
my_output_file = os.readlink('/proc/%d/fd/1' % os.getpid())