【发布时间】:2011-02-10 15:03:32
【问题描述】:
我用Popen从python调用一个C/C++程序,python代码应该观察子进程的行为并为他自己的工作收集一些数据。
问题是 C 代码已经使用管道来调用一些 shell 命令 - 所以在我从 python 执行之后,C 程序无法执行 bash shell 命令。
有什么方法可以从Popen调用来指定,子进程应该在shell中执行他自己的管道命令???
我尝试使用 shell=True,但没有帮助!
【问题讨论】:
-
“观察”是什么意思?如果子进程正在使用其标准输出与另一个子进程对话,则它不能使用它与父进程对话。也许它使用标准错误。请提供更多信息。
-
好的,child (c 代码) 已经开发完成,并且已经使用 stdout 与 superprocess (shell) 对话。现在python应该只调用child,收集他在stderr上写的东西,但是child仍然需要能够与现在的super-superprocess(shell)对话才能执行一些shell命令!
-
我对你想要做什么只有一个模糊的概念。我怀疑当您说 C 程序正在将其标准输出发送到 shell 时,您的实际意思是它被打印到屏幕上。我还怀疑您正在与许多处理管道的 API 不允许您同时通过管道输入和输出同一程序 (popen) 的事实作斗争。我不知道 Python API 会是什么样子,但这是有原因的,并且有一些方法可以通过使用较低级别的函数在 C 中解决它。尝试在命令行中输入“man pipe”
标签: c++ python c unix subprocess