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()

程序TestProgramstdin 中读取一行并将其写入stdout。我已将.rstrip() 添加到输出中以删除尾随的换行符,对于您的二进制数据,您可能不想这样做。

【讨论】:

在我的脑海中,你可以通过 Popen(["echo", "This is a test"], ...) 删除 shell=True。通常,将命令和参数分开到单独的列表元素中,例如["ls","-l","/"]

以上是关于Linux 中 Python 父进程和 C 子进程之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

如何在Linux上的c中的父进程和子进程之间进行乒乓球

什么是子进程和父进程

linux c:子进程僵尸进程与wait/waitpid的实验

[linux]父进程退出时如何确保子进程退出?

如何从父进程获取子进程的状态,即它是停止、继续还是退出?对于 Linux,C 语言

Python3 多进程和多线程