如何从 Python 写入标准输出并同时(通过 Unix 管道)将其提供给另一个程序?例如,如果您有
# write file line by line
with open("myfile") as f:
for line in f:
print line.strip()
但是您希望它逐行转到另一个程序,例如| wc -l
,以便它输出myfile
. 怎么可能呢?谢谢。
如何从 Python 写入标准输出并同时(通过 Unix 管道)将其提供给另一个程序?例如,如果您有
# write file line by line
with open("myfile") as f:
for line in f:
print line.strip()
但是您希望它逐行转到另一个程序,例如| wc -l
,以便它输出myfile
. 怎么可能呢?谢谢。
如果您想通过管道python
连接到wc
外部,这很容易,并且可以正常工作:
python myscript.py | wc -l
如果你想 tee 让它的输出被打印并被传送到wc
,尝试man tee
或者更好的是,你的 shell 内置的花哨的重定向功能。
如果您希望wc -l
从脚本中运行,并将输出发送到 stdout 和它,您也可以这样做。
首先,使用subprocess.Popen
启动wc -l
:
wc = subprocess.Popen(['wc', '-l'], stdin=subprocess.PIPE)
现在,您可以这样做:
# write file line by line
with open("myfile") as f:
for line in f:
stripped = line.strip()
wc.stdin.write(stripped + '\n')
这将使wc
' 的输出与您的脚本的输出相同。如果这不是您想要的,您也可以将其stdout
设为 PIPE。在这种情况下,您希望使用communicate
而不是尝试手动获取所有繁琐的细节。