0

我正在尝试使用run函数运行外部程序的输出。这个程序会定期抛出一行数据,我需要在我的脚本中使用这些数据我找到了一个子进程库并使用了它的run()/check_output()

示例:
def usual_process(): # some code here for i in subprocess.check_output(['foo','$$']): some_function(i)

现在假设 foo 已经在 PATH 变量中,并且它以半随机周期输出一个字符串。
我希望程序做自己的事情,并在some_function(i)每次 foo 向其输出发送新行时运行。

这归结为两个问题。将输出输送到 for 循环中并将其作为后台子进程运行 谢谢


更新:我已经设法使用This将 foo 输出到 some_function

with os.popen('foo') as foos_output:
    for line in foos_output:
        some_function(line)

根据this os.popen is to be deprecated,但我还没有弄清楚如何在python中管道内部进程现在只需要弄清楚如何在后台运行这个函数

4

1 回答 1

0

所以,我已经解决了。第一步是启动外部脚本:
proc=Popen('./cisla.sh', stdout=PIPE, bufsize=1)

接下来我启动了一个函数来读取它并传递给它一个管道

def foo(proc, **args):
       for i in proc.stdout:
         '''Do all I want to do with each'''

foo(proc).start()`

限制是:如果您希望捕获脚本错误,则必须将其输入。
第二,如果您杀死父母,它会留下僵尸所以不要忘记在信号处理中杀死孩子

于 2017-06-11T20:10:41.407 回答