Python中popen2()函数实现多进程通信的方法
发布时间:2024-01-01 10:09:47
Python中的popen2()函数已经在Python 2.x中被废弃,不推荐使用。在Python 3.x中,可以使用subprocess模块来实现多进程通信。
subprocess模块提供了一个名为Popen的类,它可用于创建一个子进程并与其交互。下面是一个使用Popen实现多进程通信的例子:
import subprocess
# 创建子进程并执行命令
process = subprocess.Popen(['python', 'child_process.py'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
# 与子进程通信
process.stdin.write(b'Hello from parent process!
')
process.stdin.flush()
response = process.stdout.readline().decode('utf-8')
# 输出子进程的回复
print(response)
# 等待子进程结束
process.wait()
在上面的示例中,首先使用subprocess.Popen创建一个子进程,并指定要执行的命令。在这里,我们使用python child_process.py来执行一个名为child_process.py的Python脚本。
然后,通过process.stdin.write方法将数据写入子进程的标准输入。在这里,我们将一条消息Hello from parent process!
发送给子进程。使用process.stdin.flush确保数据被及时发送。
接着,使用process.stdout.readline方法从子进程的标准输出中读取一行数据。注意使用decode方法将bytes对象转换为字符串。
最后,输出子进程的回复,并使用process.wait等待子进程结束。
在子进程的脚本child_process.py中,可以使用sys模块来接收来自父进程的数据,并通过print将回复发送给父进程。例如:
import sys # 从父进程读取数据 data = sys.stdin.readline().strip() # 发送回复给父进程 response = 'Hello from child process!' print(response) # 确保回复被发送 sys.stdout.flush()
在这个子进程脚本中,首先使用sys.stdin.readline读取来自父进程的数据,并使用strip方法去除末尾的换行符。
然后,通过print语句发送回复,并使用sys.stdout.flush确保回复被及时发送。
以上就是使用subprocess模块实现多进程通信的方法。在实际应用中,可以根据需要对Popen的各种参数进行调整,以满足具体的需求。
