使用 CMD 将输入文件读取到 Python 脚本

Reading input file to Python script, using CMD

我有以下问题。 我想从文件(例如 example.txt)读取输入到我的 Python 脚本(例如 script.py)。现在,我已经实现了以下代码行:

import sys
with open(sys.argv[1], 'r') as f:
    contents = f.read()

而且,当我想将文件读取到此脚本时,我只需要在 CMD 中键入以下行:

python script.py example.txt

当然,它工作正常。文件 example.txt 被 script.py 读取,可以通过向 script.py.

添加简单的 print(contents) 行来检查

问题是,必须 运行 CMD中的这段代码就像这样:

script.py < example.txt

所以,问题是,我怎样才能做到这一点?我想,这取决于 OS。在我的 Windows 10 上,出现错误:

Traceback (most recent call last):
File "script.py", line 2, in <module>
with open(sys.argv[1], 'r') as f:
IndexError: list index out of range

我不是在寻求解决方案(但它会很好),但我只是想知道我应该在哪里寻找解决方案。

script.py < example.txt 将文件内容发送到可以通过 sys.stdin 访问的标准输入。以下作品:

import sys

# First try supporting commands formatted like: script.py example.txt
if len(sys.argv) > 1:
    with open(sys.argv[1]) as f:
        contents = f.read()
# Now try supporting: script.py < example.txt
elif sys.stdin:
    contents = ''.join(sys.stdin)
# If both methods failed, throw a user friendly error
else:
    raise Exception('Please supply a file')

print(contents)

但在古老的 Python 时尚中,有一个内置的图书馆可以让我们的生活变得非常轻松。该库是 fileinput,它将自动支持您提到的两种读取输入的方法:

import fileinput
contents = fileinput.input()
print( ''.join(contents) )

无论您是 script.py example.txt 还是 script.py < example.txt 还是 cat example.txt | script.py 都有效,您甚至可以 script.py example1.txt example2.txt example3.txt 并且您将收到不同文件的内容文件组合在一起。