Linux 中 Python 父进程和 C 子进程之间的通信
Posted
技术标签:
【中文标题】Linux 中 Python 父进程和 C 子进程之间的通信【英文标题】:Communication between a Python parent and C child processes in Linux 【发布时间】:2013-09-17 06:12:07 【问题描述】:我正在开发一个 Python 应用程序,它需要不时产生一个子进程(用 C 编写),向它提供一些二进制数据并获得回复。子进程只会在需要时生成,并且只会服务一个请求。我在这里有什么选择?使用 stdin/stdout 安全吗?
【问题讨论】:
试试subprocess 模块。 你也可以试试docs.python.org/2/library/multiprocessing.html。 @Whoami -- 多个 Python 进程不是多处理吗? OP写道,子进程是用C编写的。 是的。谢谢。我错过了那个。 :) 【参考方案1】:from subprocess import Popen,PIPE
# Example with output only
p = Popen(["echo", "This is a test"], stdout=PIPE)
out, err = p.communicate()
print out.rstrip()
# Example with input and output
p = Popen("./TestProgram", stdin=PIPE, stdout=PIPE)
out, err = p.communicate("This is the input\n")
print out.rstrip()
程序TestProgram
从stdin
中读取一行并将其写入stdout
。我已将.rstrip()
添加到输出中以删除尾随的换行符,对于您的二进制数据,您可能不想这样做。
【讨论】:
在我的脑海中,你可以通过Popen(["echo", "This is a test"], ...)
删除 shell=True
。通常,将命令和参数分开到单独的列表元素中,例如["ls","-l","/"]
。以上是关于Linux 中 Python 父进程和 C 子进程之间的通信的主要内容,如果未能解决你的问题,请参考以下文章
linux c:子进程僵尸进程与wait/waitpid的实验