基本上,我正在尝试使用subprocesslibrary(Popen)自动化一些Linux安装程序(和其他任务)。在
在过去,我可以打开这样的流程:
self.process = subprocess.Popen( self.executable,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True, shell=True)
output, cmdError = self.process.communicate()
然后,我可以打印错误消息的输出或cmdError,这对单个进程或命令很有效。在
但是,当我需要与子进程交互并检查输出时,这是非常困难的,下面是我执行此操作的代码:
^{pr2}$基本上,我将轮询输出(stdout管道),然后在安装程序(stdin)请求某个输入时发送命令。在
我尝试过刷新缓冲区,使用3种不同的方法读取/迭代stdout的输出,但是它们都只是阻塞或者只给出输出文本的一小部分。另一方面,如果我使用communicate方法,我会得到我期望的所有文本,但是它会终止进程。我也有过EOF错误和其他随机事件。在
我已经读过了:一些指南说这是2.6.x中的一个bug,但在2.7.x中仍然存在——显然stdout是缓冲的,不能更改。我已经尝试过很多不同的方法来解析来自不同线程的输出,但是我仍然不能在2.7.X上使用
肯定有人知道如何与子流程交互吗?我唯一的选择是使用pexcept吗?在
在我的环境中,我无法真正切换到python3.x.x。我希望这会是相当直接的:(
干杯
编辑:我还尝试过删除不同的管道、写入文件、更改popen上的缓冲区大小、禁用shell和通用换行符等等
目前没有回答
相关问题 更多 >
编程相关推荐