subprocess模块 如何实现进程间管道连续通信

Python/PHP/Perl 开发与设计
回复
jvjvlglg
帖子: 5
注册时间: 2009-01-07 16:39
送出感谢: 0
接收感谢: 0

subprocess模块 如何实现进程间管道连续通信

#1

帖子 jvjvlglg » 2011-03-25 14:55

子进程:

代码: 全选

while True:
	line = raw_input()
	if line == ' ':
		break
	print line
主进程

代码: 全选

import subprocess

p = subprocess.Popen(['python','./test.py'], stdin = subprocess.PIPE,stdout = subprocess.PIPE, stderr = subprocess.PIPE)

while True:
	line = raw_input()
	p.stdin.write(line+'\n')
	p.stdin.flush()
	print p.stdout.readline()
管道输出会在缓冲区中 不能实时返回 加了-u参数也不行
请问大牛们 如何实现进程间实时的通信
jvjvlglg
帖子: 5
注册时间: 2009-01-07 16:39
送出感谢: 0
接收感谢: 0

Re: subprocess模块 如何实现进程间管道连续通信

#2

帖子 jvjvlglg » 2011-03-28 12:35

咳咳 没法解决是吗 加了‘-u’参数执行会出现

代码: 全选

IOError: [Errno 32] Broken pipe
转线程处理之,python还不支持杀死子线程。。。。。。 :em84 :emb5
afox800
帖子: 200
注册时间: 2009-08-02 7:44
来自: 圣彼得堡
送出感谢: 5 次
接收感谢: 3 次

Re: subprocess模块 如何实现进程间管道连续通信

#3

帖子 afox800 » 2011-10-02 13:27

同问 ,帮顶 :em20
头像
gyx2545965
帖子: 82
注册时间: 2007-11-09 15:55
送出感谢: 0
接收感谢: 0

Re: subprocess模块 如何实现进程间管道连续通信

#4

帖子 gyx2545965 » 2011-10-15 22:32

我试过-u可以正常输出啊,不会缓冲在pipe中,加上shell=True就没有问题了;

代码: 全选

p = subprocess.Popen(['python -u ./test.py'], shell = True, stdin = subprocess.PIPE,stdout = subprocess.PIPE, stderr = subprocess.PIPE)
头像
lilydjwg
论坛版主
帖子: 4165
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: subprocess模块 如何实现进程间管道连续通信

#5

帖子 lilydjwg » 2011-10-15 23:03

jvjvlglg 写了:咳咳 没法解决是吗 加了‘-u’参数执行会出现

代码: 全选

IOError: [Errno 32] Broken pipe
转线程处理之,python还不支持杀死子线程。。。。。。 :em84 :emb5
我这里加了正常。另外,Python 3.3 支持杀死子线程了: http://docs.python.org/dev/whatsnew/3.3.html#signal
回复

回到 “Python/Php/Perl”