Python子进程更新子进程

时间:2014-07-28 02:24:01

标签: python subprocess pipe popen child-process

是否可以更新通过Popen([cmd], stdin=PIPE)生成的子流程的部分?

我一直在尝试构建一个与GUI交互以更新文件的脚本。 这就是我一直在玩的东西:

def __init__(self):
    #... <SNIPPED>
    process = self.outer._display(self.custom['dialog_name'], _passed, return_process=True)
    # Returns executed list, example -> ['/bin/foo', '--bar', '0', '--lyn', 'twenty']
    self.pipe = subprocess.Popen(process, stdin=subprocess.PIPE)

管道是在我班级的__init__内建的。我希望能够运行以下函数来更新进程。

def update(self, bar, lyn):
    self.pipe.communicate('--bar {} --lyn {}\n'.format(bin, lyn))

在初始化包含管道的类之后运行更新功能后,子进程不会更新。我对Python很陌生,所以如果我以错误的方式接近这一点,我不会感到惊讶。

如果您能帮助解释我的错误或更好地解决此问题,请告知我们。

1 个答案:

答案 0 :(得分:0)

  

我已经能够通过os.popen实现我想要的,但我更喜欢使用首选(子进程)

每个os.popen()启动一个新的shell进程。 self.pipe.communicate()无法启动新进程:它会写入所有输入,读取所有输出,并等待进程完成。

使用一组新参数启动命令:

def update(self, bar, lyn):
    cmd = ['/bin/foo', '--bar', bar, '--lyn', lyn]
    self.processes.append(subprocess.Popen(cmd))