【发布时间】:2014-09-19 04:40:06
【问题描述】:
是否可以更新通过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 还是很陌生,所以如果我以错误的方式处理这个问题,我不会感到惊讶。
如果您可以帮助解释我做错了什么或更好地解决此问题,请告诉我。
【问题讨论】:
-
您是要更新命令行还是传递正在运行的程序知道如何阅读的消息?前者无法完成AFAIK。
-
我猜我确实想要更新当前命令的参数。我已经能够通过
os.popen实现我想要的,但我宁愿使用首选(子流程) -
如前所述,您无法更新其命令行。被调用的程序必须编写以接收和处理更新,例如通过标准输入,这似乎是您的代码所期望的。分享您的
os.Popen版本并说明结果有何不同,或说明被调用程序希望如何接收更新。
标签: python subprocess pipe popen child-process