有没有办法找出文件的名称stdout被重定向到Python

时间:2011-05-10 00:04:52

标签: python python-2.7

我知道如何使用stdout检测我的Python脚本的>是否被重定向(sys.stdout.isatty()),但有没有办法发现它被重定向到什么位置?

例如:

python my.py > somefile.txt

有没有办法在Windows和Linux上发现名称somefile.txt

2 个答案:

答案 0 :(得分:10)

我怀疑你能否以独立于系统的方式做到这一点。在Linux上,以下工作:

import os
my_output_file = os.readlink('/proc/%d/fd/1' % os.getpid())

答案 1 :(得分: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',否则假设您没有名称并将其视为正常的管道。