【发布时间】:2016-03-29 07:27:28
【问题描述】:
我有一个类似服务器的应用程序,我想从 Python 运行。它永远不会停止,直到用户中断它。我想在应用程序运行时不断地将 stdout 和 stderr 重定向到父级。幸运的是,这正是 subprocess.run 所做的。
壳牌:
$ my-app
1
2
3
...
wrapper.py:
import subprocess
subprocess.run(['my-app'])
执行wrapper.py:
$ python wrapper.py
1
2
3
...
我相信这要归功于subprocess.run 从父进程继承了 stdout 和 stderr 文件描述。很好。
但现在我需要在应用输出特定行时做一些事情。想象一下,当输出行将包含 4 时,我想运行任意 Python 代码:
$ python wrapper.py
1
2
3
4 <-- here I want to do something
...
或者我想从输出中删除一些行:
$ python wrapper.py <-- allowed only odd numbers
1
3
...
我想我可以有一个过滤功能,我会以某种方式将它挂接到subprocess.run,它会在输出的每一行被调用,不管它是标准输出还是标准错误:
def filter_fn(line):
if line ...:
return line.replace(...
...
但是如何实现呢?如何将此类或类似的功能挂接到subprocess.run 调用中?
注意:我不能使用 sh 库,因为它对 Windows 的支持为零。
【问题讨论】:
标签: python python-3.x subprocess