4 python unix shell subprocess pipe
如何从Python写入stdout并同时(通过Unix管道)将其提供给另一个程序?例如,如果你有
# write file line by line
with open("myfile") as f:
for line in f:
print line.strip()
Run Code Online (Sandbox Code Playgroud)
但是你希望它逐行到另一个程序,例如| wc -l,它输出行myfile.怎么办?谢谢.
如果你想管道python到wc外部,这很容易,并且只会工作:
python myscript.py | wc -l
Run Code Online (Sandbox Code Playgroud)
如果你想开球,那么它的输出都会被打印并通过管道传输wc,尝试man tee或者更好的是你的shell的内置花式重定向功能.
如果你想wc -l在脚本中运行,并将输出发送到stdout和它,你也可以这样做.
首先,用于subprocess.Popen开始wc -l:
wc = subprocess.Popen(['wc', '-l'], stdin=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)
现在,您可以这样做:
# write file line by line
with open("myfile") as f:
for line in f:
stripped = line.strip()
wc.stdin.write(stripped + '\n')
Run Code Online (Sandbox Code Playgroud)
那将wc输出与你的脚本相同的位置.如果这不是你想要的,你也可以成为stdout一个PIPE.在这种情况下,您希望使用communicate而不是尝试手动获取所有繁琐的细节.
| 归档时间: |
|
| 查看次数: |
6942 次 |
| 最近记录: |