我知道如何使用stdout
检测我的Python脚本的>
是否被重定向(sys.stdout.isatty()
),但有没有办法发现它被重定向到什么位置?
例如:
python my.py > somefile.txt
有没有办法在Windows和Linux上发现名称somefile.txt
?
答案 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'
,否则假设您没有名称并将其视为正常的管道。