Python命令行“文件输入流”

9 投票
3 回答
10378 浏览
提问于 2025-04-16 19:56

我刚接触Python,之前是用C/C++的。我想知道怎么让我的' main.py '能够识别并使用从bash命令行输入的内容,比如:

python main.py < text.txt

(这个文件是纯文本格式的)

3 个回答

1

我会使用 argparse 来创建一个选项解析器,这样可以接受一个文件路径并打开它。

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('infile', type='open')
    args = parser.parse_args()

    for line in args.infile:
        print line

if __name__ == '__main__':
    main()

如果 type='open' 不能满足你的需求,可以用 argparse.FileType('o') 来替代,这样可以接受 bufsizemode 这两个参数(具体可以查看 这里)。

编辑:我犯了个错误。这种方法支持你的使用场景。它可以让你提供一个文件路径,但无法将文件内容传递给进程。我把这个回答留在这里,因为它可能作为一种替代方案对你有帮助。

6

在这里,使用 fileinput 模块是最合适的选择,而且它更灵活。

http://docs.python.org/library/fileinput.html

import fileinput
for line in fileinput.input():
    process(line)

除了支持标准输入(stdin),它还可以读取作为参数列出的文件。

9

sys.stdin 读取数据:

import sys
sys.stdin.read()

因为它是一个 类似文件的对象,你可以使用它的读取功能,或者直接逐行读取输入:

for line in sys.stdin:
    print line

撰写回答