是否可以更新通过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很陌生,所以如果我以错误的方式接近这一点,我不会感到惊讶。
如果您能帮助解释我的错误或更好地解决此问题,请告知我们。
答案 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))