我们想用控制标准输入和输出的方式, 来进行两个进程之间的通信, 思路是用主进程启动子进程, 然后重定向子进程的标准输入和输出, 例如如下:
主程序:
import subprocess
ret = subprocess.Popen(
r"D:\target.exe",
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
)
ret.stdin.write("tony1\n")
ret.stdin.flush()
print ret.stdout.readline()
ret.stdin.write('tony2\n')
ret.stdin.flush()
print ret.stdout.readline()
ret.wait()
子程序 target.py
: 用pyinstaller -F target.py
打包成exe
# -*- coding: utf-8 -*-
# @Time : 2022/1/21 13:34
# @Author : wangxiaofeng01@corp.netease.com
import sys
name = raw_input()
sys.stdout.write('hello : {}\n'.format(name))
sys.stdout.flush()
执行结果如下:
其中有三个关键点:
- 父进程不能有
shell=Tru
e的参数 - 子进程用
raw_input()
进行读取时, 发送者必须加上\n
, 也必须加上flush
- 返回时, 别用
print
, 用sys.stdout.write('{}\n'.format(str))
这样好控制行数,sys.stdout.flush()
这样清空buffer, 不让程序卡死