【发布时间】:2018-04-04 17:10:13
【问题描述】:
我必须创建一个可用于 Linux 管道的 python 脚本
我想运行一个脚本,其中一些参数可以通过管道或在同一行中发送
将我的脚本与预期输出一起使用的一些示例:
echo "a" > list.txt
echo "b" >> list.txt
./run.py p1 p2 # ['p1', 'p2'] expected output
cat list.txt | ./run.py # ['a', 'b'] expected output
cat list.txt | ./run.py p1 p2 # ['p1', 'p2', 'a', 'b'] expected output
我试过了:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('args', nargs=argparse.REMAINDER)
args = parser.parse_args().args
print args
它只适用于同一行中的参数:
./run.py p1 p2 #['p1', 'p2'] OK
cat list.txt | ./run.py # [] Not OK
cat list.txt | ./run.py p1 p2 # ['p1', 'p2'] expected output
【问题讨论】:
-
直接管道参数在这里不起作用,因为
run.py中没有标准输入处理程序,在不修改原始 python 脚本的情况下,xargs等工具可以帮助构建和执行正确的命令行从标准输入管道传递参数 -
“没有处理程序”甚至没有库?
-
我的意思是如果你想让 argparse 从标准输入中读取,你可以使用
sys.stdin,例如通过添加parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin)你也可以从parser.parse_args().infile检索输入