从Python调用另一个进程/子进程需要访问Shell

0 投票
2 回答
566 浏览
提问于 2025-04-15 21:52

我正在用 Popen 从 Python 调用一个 C/C++ 程序,Python 代码需要观察这个子进程的行为,并收集一些数据来做自己的工作。

问题是,C 代码已经在使用管道来调用一些 shell 命令,所以在我从 Python 执行后,C 程序就无法再执行 bash shell 命令了。

有没有办法在用 Popen 调用时,指定子进程可以在 shell 中执行它自己的管道命令呢?

我试过设置 shell=True,但没有用!

2 个回答

0

最好的方法可能是使用一个TCP连接到本地计算机。如果你使用的是*类Unix系统,你可以通过打开一个临时文件,然后从主程序中定期检查这个文件来实现。

2

根据你的描述,听起来你是在用Popen来执行一个命令行,而这个Popen又调用了一个shell。

其实你应该让Popen直接调用你的程序,像这样:

from subprocess import Popen,PIPE
p = Popen(['/my/fancy/program','-myarg1','-myarg2'],stdout=PIPE)
from_process = p.communicate()[1]

撰写回答