如果没有提供文件名,则回退到stdout

2024-04-25 07:01:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个脚本,它接受一个文件名作为参数,然后打开它并写一些东西。在

我使用with语句:

with open(file_name, 'w') as out_file:
    ...
    out_file.write(...)

如果没有提供file_name,如果我想写sys.stdout怎么办?在

我是否需要将所有操作包装在函数中并在前面设置条件?在

^{pr2}$

Tags: 函数name脚本参数文件名aswithstdout
3条回答
from contextlib import contextmanager
@contextmanager
def file_or_stdout(file_name):
    if file_name is None:
        yield sys.stdout
    else:
        with open(file_name, 'w') as out_file:
            yield out_file

那你就可以了

^{pr2}$

您可以编写自己的上下文管理器。如果没有其他人可以的话,我会稍后发布示例代码

如何处理命令行参数?如果使用argparse,则可以使用add_argument^{}^{}参数来处理此问题。例如,尝试以下操作:

import sys
import argparse

def main(argv=None):

    if argv is None:
        argv=sys.argv[1:]

    parser = argparse.ArgumentParser()

    parser.add_argument('infile', nargs='?',
        type=argparse.FileType('w'),
        default=sys.stdin)

    args = parser.parse_args(argv)

    print args.infile

    return 0

if __name__=="__main__":
    sys.exit(main(sys.argv[1:]))

如果文件名作为参数出现,脚本argparse将自动打开和关闭此文件,args.infile将是该文件的句柄。否则args.infile将只是sys.stdin。在

相关问题 更多 >