强制Python脚本从STDIN读取输入

7 投票
6 回答
3924 浏览
提问于 2025-04-16 01:27

我有一个Python脚本,它只接受从文件中读取的输入,这个文件是通过命令行参数传递的,像这样:

$ markdown.py input_file

有没有办法让它改为从标准输入(STDIN)获取输入呢?我希望能通过Bash来实现,而不需要大幅修改这个Python脚本:

$ echo "Some text here" | markdown.py

如果我必须修改这个Python脚本,我该怎么做呢?

(编辑:这里是解析命令行选项的脚本。)

6 个回答

0

在你的代码中,有一行是这样的:

if not len(args) == 1:

你可以做的是检查一下,如果没有文件名的话,可以使用"/dev/stdin"(在支持这个的系统上)。

另一种解决办法是直接把:

if not len(args) == 1:
    parser.print_help()
    return None, None
else:
    input_file = args[0]

替换成

if not len(args) == 1:
    input_file = sys.stdin
else:
    input_file = open(args[0])

这意味着返回的"input_file"不再是文件名,而是一个文件对象,这样在调用这个函数的地方就需要做一些额外的修改。

第一种解决方案修改较少,但比较依赖于特定的平台;第二种方案工作量更大,但应该能在更多系统上运行。

4

确保这段代码在文件的顶部附近:

import sys

然后找一下类似这样的内容:

filename = sys.argv[1]
f = open(filename)

把它替换成这个:

f = sys.stdin

如果不看到你开始的脚本,具体的建议就很难给出。

11

我不太确定这个方法的通用性如何,但在类Unix系统上,你可以把/dev/stdin当作你的文件来使用:

$ echo -n hi there | wc /dev/stdin
       0       2       8 /dev/stdin

撰写回答