在python3(lynux)中将run()的绑定/管道输出打开/放入函数中

时间:2017-04-09 01:23:18

标签: python parallel-processing subprocess function-binding

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

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

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

沸腾到两个问题。将输出传递给for循环并将其作为后台子进程运行 谢谢

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

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

根据this os.popen 将被弃用,但我还没弄明白如何在python中管道内部进程 现在只需要弄清楚如何在后台运行这个功能

1 个答案:

答案 0 :(得分: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()`

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