强制Python脚本从STDIN读取输入
我有一个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