如果将文件作为参数或stdin(如果不是)提供,是否有更具python风格的方法来打开文件?

如果将文件作为参数或stdin(如果不是)提供,是否有更具python风格的方法来打开文件?,python,unix,command-line,Python,Unix,Command Line,我正在尝试编写一个python脚本,它遵循常见的unix命令行模式,即在没有给出文件名的情况下接受来自stdin的输入。这就是我一直在使用的: if __name__ == "__main__": if len(sys.argv) > 1: stream = open(sys.argv[1]) else: stream = sys.stdin 有没有一种更像python的方法可以做到这一点呢?类似但只有一行的解决方案 stream = sy

我正在尝试编写一个python脚本,它遵循常见的unix命令行模式,即在没有给出文件名的情况下接受来自stdin的输入。这就是我一直在使用的:

if __name__ == "__main__":
    if len(sys.argv) > 1:
        stream = open(sys.argv[1])
    else:
        stream = sys.stdin

有没有一种更像python的方法可以做到这一点呢?

类似但只有一行的解决方案

stream = sys.argv[1] if len(sys.argv)>1 else sys.stdin

该模块非常适合此功能。

我建议您将其改为更单轴:

if len(sys.argv) > 1:
    sys.stdin = open(sys.argv[1])
这个怎么样

stream=sys.argv[1:] and open(sys.argv[1]) or sys.stdin

len(sys.argv)
是否总是至少有一个(脚本名为
argv[0]
)?是的,这正是我想要的。谢谢对于额外的积分,您是否有任何关于如何很好地使用它的提示?-1:这会使sys.stdin改变语义(请参阅sys模块的文档),并打破预期。因此,这会降低代码的易读性(错过sys.stdin更改的人会推断程序没有读取输入文件参数)。的副本