Python论坛  - 讨论区

标题:[python-chinese] python进程间如何通信

2005年07月13日 星期三 16:39

Jason Liu telecomliu at gmail.com
Wed Jul 13 16:39:11 HKT 2005

hi:
两个python进程间如何实现通信?
我试过subprocess.Popen,但我实在没法理解Popen.communicate的用法。-__-b

现在我只需要实现由第一个进程A生成进程B(都是python程序),并由A向B发送不确定的字符串。

谢谢!

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月13日 星期三 16:47

limodou limodou at gmail.com
Wed Jul 13 16:47:05 HKT 2005

进程通讯的方法很多,这基本上是属于操作系统的问题,如信号灯,共享内存,管道,socket什么的。

在 05-7-13,Jason Liu<telecomliu at gmail.com> 写道:
> hi:
> 两个python进程间如何实现通信?
> 我试过subprocess.Popen,但我实在没法理解Popen.communicate的用法。-__-b
> 
> 现在我只需要实现由第一个进程A生成进程B(都是python程序),并由A向B发送不确定的字符串。
> 
> 谢谢!
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 


-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou
New Google Maillist: http://groups-beta.google.com/group/python-cn

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月13日 星期三 17:08

Bruce Who whoonline at msn.com
Wed Jul 13 17:08:45 HKT 2005

Alex Dong:

	和其它的几个web framework比起来是要慢一些,不过没有>5sec这么慢,大概是2~3sec吧。如果只是打开一般的页面,那和其它的没什么区别。我的配置是256M memory/2.4G CPU。

======= 2005-07-13 16:56:08 Alex Dong wrote: =======

>我试了一下,数据库用内置的Gadfly,在1G Memory, 1.6G
>CPU上load一个kwiki或者附带的eCommerce的例子,速度比较慢(>5sec)。不知道在你们机器上是否也是这样。

= = = = = = = = = = = = = = = = = = = =
			
Best regards,

        Bruce Who
          2005-07-13


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月13日 星期三 17:12

Jason Liu telecomliu at gmail.com
Wed Jul 13 17:12:41 HKT 2005

subprocess.Popen应该是提供了管道方式,但我不知道怎么用。

在 05-7-13,limodou<limodou at gmail.com> 写道:
> 进程通讯的方法很多,这基本上是属于操作系统的问题,如信号灯,共享内存,管道,socket什么的。
> 
> 在 05-7-13,Jason Liu<telecomliu at gmail.com> 写道:
> > hi:
> > 两个python进程间如何实现通信?
> > 我试过subprocess.Popen,但我实在没法理解Popen.communicate的用法。-__-b
> >
> > 现在我只需要实现由第一个进程A生成进程B(都是python程序),并由A向B发送不确定的字符串。
> >
> > 谢谢!
> >
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> >
> >
> >
> 
> 
> --
> I like python!
> My Donews Blog: http://www.donews.net/limodou
> New Google Maillist: http://groups-beta.google.com/group/python-cn
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月13日 星期三 17:30

limodou limodou at gmail.com
Wed Jul 13 17:30:01 HKT 2005

它返回一个文件对象呀,读就行了。

在 05-7-13,Jason Liu<telecomliu at gmail.com> 写道:
> subprocess.Popen应该是提供了管道方式,但我不知道怎么用。
> 
> 在 05-7-13,limodou<limodou at gmail.com> 写道:
> > 进程通讯的方法很多,这基本上是属于操作系统的问题,如信号灯,共享内存,管道,socket什么的。
> >
> > 在 05-7-13,Jason Liu<telecomliu at gmail.com> 写道:
> > > hi:
> > > 两个python进程间如何实现通信?
> > > 我试过subprocess.Popen,但我实在没法理解Popen.communicate的用法。-__-b
> > >
> > > 现在我只需要实现由第一个进程A生成进程B(都是python程序),并由A向B发送不确定的字符串。
> > >
> > > 谢谢!
> > >
> > > _______________________________________________
> > > python-chinese list
> > > python-chinese at lists.python.cn
> > > http://python.cn/mailman/listinfo/python-chinese
> > >
> > >
> > >
> >
> >
> > --
> > I like python!
> > My Donews Blog: http://www.donews.net/limodou
> > New Google Maillist: http://groups-beta.google.com/group/python-cn
> >
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> >
> >
> >
> 


-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou
New Google Maillist: http://groups-beta.google.com/group/python-cn

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 00:13

Jason Liu telecomliu at gmail.com
Thu Jul 14 00:13:24 HKT 2005

您是指Popen还是Popen.communicate?
Popen包含stdin, stdout,
stderr属性,我试图向Popen.stdin写入数据但传输不过去。用Popen.communicate方法也不成功。

Sample Code如下:
#程序A
#产生子进程B(receiver.py),并向其发送字符串
  import subprocess, time
  subproc = subprocess.Popen(['receiver.py'], stdin=subprocess.PIPE, shell=True)
    #运行子进程B,第二个参数可能不正确。
    time.sleep(0.5)
    print 'start'
    #下面两种方法都不行
    subproc.stdin.write('data\n')
    subproc.communicate('data\n')
    print 'end'

#程序B receiver.py
#从stdin读字符串并打印之。
    import sys
    print 'receive...'
    s = sys.stdin.readline()
    print 'get:', len(s), s

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 10:00

limodou limodou at gmail.com
Thu Jul 14 10:00:24 HKT 2005

具体的操作要看文档。popen应该是返回一个输出的文件对象,如果想输入也重定向需要使用popen2,如果连错误也重定向需要使用popen3。

不过使用subprocess模块可能更方便一些,还是看一看例子吧,我也没用过。

在 05-7-14,Jason Liu<telecomliu at gmail.com> 写道:
> 您是指Popen还是Popen.communicate?
> Popen包含stdin, stdout,
> stderr属性,我试图向Popen.stdin写入数据但传输不过去。用Popen.communicate方法也不成功。
> 
> Sample Code如下:
> #程序A
> #产生子进程B(receiver.py),并向其发送字符串
>   import subprocess, time
>   subproc = subprocess.Popen(['receiver.py'], stdin=subprocess.PIPE, shell=True)
>     #运行子进程B,第二个参数可能不正确。
>     time.sleep(0.5)
>     print 'start'
>     #下面两种方法都不行
>     subproc.stdin.write('data\n')
>     subproc.communicate('data\n')
>     print 'end'
> 
> #程序B receiver.py
> #从stdin读字符串并打印之。
>     import sys
>     print 'receive...'
>     s = sys.stdin.readline()
>     print 'get:', len(s), s
> 


-- 
I like python! 
My Donews Blog: http://www.donews.net/limodou
New Google Maillist: http://groups-beta.google.com/group/python-cn

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 10:12

Neo Chan (netkiller) neo.chen at achievo.com
Thu Jul 14 10:12:56 HKT 2005

 
共享内存,管道我用过..
如果是LINUX建议用 管道


Neo Chan (netkiller)
Best Regards, 73! de BG7NYT

Personal Amateur Radiostations of P.R.China
CQ24 ITU44
ShenZhen,China
Amateur Radio Callsign: BG7NYT
TRX: YAEUS FT-60R Dual Band(144-430)
WATTS: 0.5W, 2.0W, 5.0W
MODE: AM, FM


-----Original Message-----
From: python-chinese-bounces at lists.python.cn
[mailto:python-chinese-bounces at lists.python.cn] On Behalf Of limodou
Sent: Wednesday, July 13, 2005 4:47 PM
To: python-chinese at lists.python.cn
Subject: Re: [python-chinese] python进程间如何通信

进程通讯的方法很多,这基本上是属于操作系统的问题,如信号灯,共享内存,管道,
socket什么的。

在 05-7-13,Jason Liu<telecomliu at gmail.com> 写道:
> hi:
> 两个python进程间如何实现通信?
> 我试过subprocess.Popen,但我实在没法理解Popen.communicate的用法。-__-b
> 
> 现在我只需要实现由第一个进程A生成进程B(都是python程序),并由A向B发送不确
定的字符串。
> 
> 谢谢!
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 


--
I like python! 
My Donews Blog: http://www.donews.net/limodou New Google Maillist:
http://groups-beta.google.com/group/python-cn
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Neo Chan.vcf
Type: text/x-vcard
Size: 1081 bytes
Desc: not available
Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20050714/870cf371/NeoChan.vcf

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 10:15

Neo Chan (netkiller) neo.chen at achievo.com
Thu Jul 14 10:15:47 HKT 2005

 
管道方式
1,你要先建一个管道文件
mkfifo 吧..忘了..可能是这个命令.
然后 popen 打开这个字符设备文件..就可以了.
如果你测试.可以.

cat your_fifo

在另一个控制台下
echo hkasfaksdjfa;sdkjfl > your_fifo

Neo Chan (netkiller)
Best Regards, 73! de BG7NYT

Personal Amateur Radiostations of P.R.China
CQ24 ITU44
ShenZhen,China
Amateur Radio Callsign: BG7NYT
TRX: YAEUS FT-60R Dual Band(144-430)
WATTS: 0.5W, 2.0W, 5.0W
MODE: AM, FM


-----Original Message-----
From: python-chinese-bounces at lists.python.cn
[mailto:python-chinese-bounces at lists.python.cn] On Behalf Of Jason Liu
Sent: Wednesday, July 13, 2005 5:13 PM
To: limodou; python-chinese at lists.python.cn
Subject: Re: [python-chinese] python进程间如何通信

subprocess.Popen应该是提供了管道方式,但我不知道怎么用。

在 05-7-13,limodou<limodou at gmail.com> 写道:
> 进程通讯的方法很多,这基本上是属于操作系统的问题,如信号灯,共享内存,管
道,socket什么的。
> 
> 在 05-7-13,Jason Liu<telecomliu at gmail.com> 写道:
> > hi:
> > 两个python进程间如何实现通信?
> > 我试过subprocess.Popen,但我实在没法理解Popen.communicate的用法。-__-b
> >
> > 现在我只需要实现由第一个进程A生成进程B(都是python程序),并由A向B发送不
确定的字符串。
> >
> > 谢谢!
> >
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> >
> >
> >
> 
> 
> --
> I like python!
> My Donews Blog: http://www.donews.net/limodou New Google Maillist: 
> http://groups-beta.google.com/group/python-cn
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Neo Chan.vcf
Type: text/x-vcard
Size: 1081 bytes
Desc: not available
Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20050714/35712ee0/NeoChan.vcf

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 10:56

Qiangning Hong hongqn at gmail.com
Thu Jul 14 10:56:34 HKT 2005

Jason Liu wrote:
> 您是指Popen还是Popen.communicate?
> Popen包含stdin, stdout,
> stderr属性,我试图向Popen.stdin写入数据但传输不过去。用Popen.communicate方法也不成功。
> 
> Sample Code如下:
> #程序A
> #产生子进程B(receiver.py),并向其发送字符串
>   import subprocess, time
>   subproc = subprocess.Popen(['receiver.py'], stdin=subprocess.PIPE, shell=True)
>     #运行子进程B,第二个参数可能不正确。
>     time.sleep(0.5)
>     print 'start'
>     #下面两种方法都不行
>     subproc.stdin.write('data\n')
>     subproc.communicate('data\n')
>     print 'end'
> 
> #程序B receiver.py
> #从stdin读字符串并打印之。
>     import sys
>     print 'receive...'
>     s = sys.stdin.readline()
>     print 'get:', len(s), s

我用你的程序用stdin.write和communicate两种方法都成功了,输出结果如下:
receive...
start
end
get: 5 data

你注意一下receiver.py是否可执行,以及它是否在PATH路径中。在linux下你需要
在receiver.py文件头加入 #!/usr/bin/python 以及执行chmod +x receiver.py。
如果receiver.py不在PATH中,仅仅是在当前路径中,则需要把程序A的调用改成

subproc = subprocess.Popen(['./receiver.py'], stdin=subprocess.PIPE,
                           shell=True)

-- 
Qiangning Hong

I'm usually annoyed by IDEs because, for instance, they don't use VIM
as an editor. Since I'm hooked to that, all IDEs I've used so far have
failed to impress me.
    -- Sybren Stuvel @ c.l.python

Get Firefox!
<http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 13:33

Jason Liu telecomliu at gmail.com
Thu Jul 14 13:33:13 HKT 2005

在windows下,B中的

sys.stdin.readline()

如果没有输入就返回了,
也就是说,程序B不等有输入就退出了。
其结果就是:
receive...
get: 0
start
end

哪位高人在windows下试试看。谢谢!

在 05-7-14,Qiangning Hong<hongqn at gmail.com> 写道:
> Jason Liu wrote:
> > 您是指Popen还是Popen.communicate?
> > Popen包含stdin, stdout,
> > stderr属性,我试图向Popen.stdin写入数据但传输不过去。用Popen.communicate方法也不成功。
> >
> > Sample Code如下:
> > #程序A
> > #产生子进程B(receiver.py),并向其发送字符串
> >   import subprocess, time
> >   subproc = subprocess.Popen(['receiver.py'], stdin=subprocess.PIPE, shell=True)
> >     #运行子进程B,第二个参数可能不正确。
> >     time.sleep(0.5)
> >     print 'start'
> >     #下面两种方法都不行
> >     subproc.stdin.write('data\n')
> >     subproc.communicate('data\n')
> >     print 'end'
> >
> > #程序B receiver.py
> > #从stdin读字符串并打印之。
> >     import sys
> >     print 'receive...'
> >     s = sys.stdin.readline()
> >     print 'get:', len(s), s
> 
> 我用你的程序用stdin.write和communicate两种方法都成功了,输出结果如下:
> receive...
> start
> end
> get: 5 data
> 
> 你注意一下receiver.py是否可执行,以及它是否在PATH路径中。在linux下你需要
> 在receiver.py文件头加入 #!/usr/bin/python 以及执行chmod +x receiver.py。
> 如果receiver.py不在PATH中,仅仅是在当前路径中,则需要把程序A的调用改成
> 
> subproc = subprocess.Popen(['./receiver.py'], stdin=subprocess.PIPE,
>                           shell=True)
> 
> --
> Qiangning Hong
> 
> I'm usually annoyed by IDEs because, for instance, they don't use VIM
> as an editor. Since I'm hooked to that, all IDEs I've used so far have
> failed to impress me.
>    -- Sybren Stuvel @ c.l.python
> 
> Get Firefox!
> <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 14:10

nEO gentoo.cn at gmail.com
Thu Jul 14 14:10:14 HKT 2005

windows 不支持 popen
你可以看看 APUE《Advanced Programming in the UNIX Environment》这本书
详细的讲解了进程间通信等问题

在05-7-14,Jason Liu <telecomliu at gmail.com> 写道:
> 
> 在windows下,B中的
> 
> sys.stdin.readline()
> 
> 如果没有输入就返回了,
> 也就是说,程序B不等有输入就退出了。
> 其结果就是:
> receive...
> get: 0
> start
> end
> 
> 哪位高人在windows下试试看。谢谢!
> 
> 在 05-7-14,Qiangning Hong<hongqn at gmail.com> 写道:
> > Jason Liu wrote:
> > > 您是指Popen还是Popen.communicate?
> > > Popen包含stdin, stdout,
> > > stderr属性,我试图向Popen.stdin写入数据但传输不过去。用Popen.communicate方法也不成功。
> > >
> > > Sample Code如下:
> > > #程序A
> > > #产生子进程B(receiver.py),并向其发送字符串
> > > import subprocess, time
> > > subproc = subprocess.Popen(['receiver.py'], stdin=subprocess.PIPE, 
> shell=True)
> > > #运行子进程B,第二个参数可能不正确。
> > > time.sleep(0.5)
> > > print 'start'
> > > #下面两种方法都不行
> > > subproc.stdin.write('data\n')
> > > subproc.communicate('data\n')
> > > print 'end'
> > >
> > > #程序B receiver.py
> > > #从stdin读字符串并打印之。
> > > import sys
> > > print 'receive...'
> > > s = sys.stdin.readline()
> > > print 'get:', len(s), s
> >
> > 我用你的程序用stdin.write和communicate两种方法都成功了,输出结果如下:
> > receive...
> > start
> > end
> > get: 5 data
> >
> > 你注意一下receiver.py是否可执行,以及它是否在PATH路径中。在linux下你需要
> > 在receiver.py文件头加入 #!/usr/bin/python 以及执行chmod +x receiver.py。
> > 如果receiver.py不在PATH中,仅仅是在当前路径中,则需要把程序A的调用改成
> >
> > subproc = subprocess.Popen(['./receiver.py'], stdin=subprocess.PIPE,
> > shell=True)
> >
> > --
> > Qiangning Hong
> >
> > I'm usually annoyed by IDEs because, for instance, they don't use VIM
> > as an editor. Since I'm hooked to that, all IDEs I've used so far have
> > failed to impress me.
> > -- Sybren Stuvel @ c.l.python
> >
> > Get Firefox!
> > <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> >
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 


-- 
I'm the one, powered by nEO
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050714/7cd600c6/attachment-0001.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 14:38

张骏 zhangj at foreseen-info.com
Thu Jul 14 14:38:50 HKT 2005

windows下还是用socket吧
或者mmap但要搞好同步

idle就是用的socket进行通信的
----------------------- Original Message -----------------------
From:    nEO <gentoo.cn at gmail.com>
To:      Jason Liu <telecomliu at gmail.com>, python-chinese at lists.python.cn
Date:    Thu, 14 Jul 2005 14:10:14 +0800
Subject: Re: [python-chinese] python进程间如何通信
----------------------------------------------------------------
> windows 不支持 popen
> 你可以看看 APUE《Advanced Programming in the UNIX Environment》这本书
> 详细的讲解了进程间通信等问题
> 
> 在05-7-14,Jason Liu <telecomliu at gmail.com> 写道:
> > 
> > 在windows下,B中的
> > 
> > sys.stdin.readline()
> > 
> > 如果没有输入就返回了,
> > 也就是说,程序B不等有输入就退出了。
> > 其结果就是:
> > receive...
> > get: 0
> > start
> > end
> > 
> > 哪位高人在windows下试试看。谢谢!
> > 
> > 在 05-7-14,Qiangning Hong<hongqn at gmail.com> 写道:
> > > Jason Liu wrote:
> > > > 您是指Popen还是Popen.communicate?
> > > > Popen包含stdin, stdout,
> > > > stderr属性,我试图向Popen.stdin写入数据但传输不过去。用Popen.communicate方法也不成功。
> > > >
> > > > Sample Code如下:
> > > > #程序A
> > > > #产生子进程B(receiver.py),并向其发送字符串
> > > > import subprocess, time
> > > > subproc = subprocess.Popen(['receiver.py'], stdin=subprocess.PIPE, 
> > shell=True)
> > > > #运行子进程B,第二个参数可能不正确。
> > > > time.sleep(0.5)
> > > > print 'start'
> > > > #下面两种方法都不行
> > > > subproc.stdin.write('data\n')
> > > > subproc.communicate('data\n')
> > > > print 'end'
> > > >
> > > > #程序B receiver.py
> > > > #从stdin读字符串并打印之。
> > > > import sys
> > > > print 'receive...'
> > > > s = sys.stdin.readline()
> > > > print 'get:', len(s), s
> > >
> > > 我用你的程序用stdin.write和communicate两种方法都成功了,输出结果如下:
> > > receive...
> > > start
> > > end
> > > get: 5 data
> > >
> > > 你注意一下receiver.py是否可执行,以及它是否在PATH路径中。在linux下你需要
> > > 在receiver.py文件头加入 #!/usr/bin/python 以及执行chmod +x receiver.py。
> > > 如果receiver.py不在PATH中,仅仅是在当前路径中,则需要把程序A的调用改成
> > >
> > > subproc = subprocess.Popen(['./receiver.py'], stdin=subprocess.PIPE,
> > > shell=True)
> > >
> > > --
> > > Qiangning Hong
> > >
> > > I'm usually annoyed by IDEs because, for instance, they don't use VIM
> > > as an editor. Since I'm hooked to that, all IDEs I've used so far have
> > > failed to impress me.
> > > -- Sybren Stuvel @ c.l.python
> > >
> > > Get Firefox!
> > > <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>
> > > _______________________________________________
> > > python-chinese list
> > > python-chinese at lists.python.cn
> > > http://python.cn/mailman/listinfo/python-chinese
> > >
> > 
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> > 
> > 
> > 
> 
> 
> -- 
> I'm the one, powered by nEO

--------------------- Original Message Ends --------------------

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 14:52

Qiangning Hong hongqn at gmail.com
Thu Jul 14 14:52:38 HKT 2005

在windows下试了一下,改成这样就可以

subproc = subprocess.Popen(['python', 'receiver.py'],
stdin=subprocess.PIPE, shell=True)


On 7/14/05, Jason Liu <telecomliu at gmail.com> wrote:
> 在windows下,B中的
> 
> sys.stdin.readline()
> 
> 如果没有输入就返回了,
> 也就是说,程序B不等有输入就退出了。
> 其结果就是:
> receive...
> get: 0
> start
> end
> 
> 哪位高人在windows下试试看。谢谢!
> 
> 在 05-7-14,Qiangning Hong<hongqn at gmail.com> 写道:
> > Jason Liu wrote:
> > > 您是指Popen还是Popen.communicate?
> > > Popen包含stdin, stdout,
> > > stderr属性,我试图向Popen.stdin写入数据但传输不过去。用Popen.communicate方法也不成功。
> > >
> > > Sample Code如下:
> > > #程序A
> > > #产生子进程B(receiver.py),并向其发送字符串
> > >   import subprocess, time
> > >   subproc = subprocess.Popen(['receiver.py'], stdin=subprocess.PIPE, shell=True)
> > >     #运行子进程B,第二个参数可能不正确。
> > >     time.sleep(0.5)
> > >     print 'start'
> > >     #下面两种方法都不行
> > >     subproc.stdin.write('data\n')
> > >     subproc.communicate('data\n')
> > >     print 'end'
> > >
> > > #程序B receiver.py
> > > #从stdin读字符串并打印之。
> > >     import sys
> > >     print 'receive...'
> > >     s = sys.stdin.readline()
> > >     print 'get:', len(s), s
> >
> > 我用你的程序用stdin.write和communicate两种方法都成功了,输出结果如下:
> > receive...
> > start
> > end
> > get: 5 data
> >
> > 你注意一下receiver.py是否可执行,以及它是否在PATH路径中。在linux下你需要
> > 在receiver.py文件头加入 #!/usr/bin/python 以及执行chmod +x receiver.py。
> > 如果receiver.py不在PATH中,仅仅是在当前路径中,则需要把程序A的调用改成
> >
> > subproc = subprocess.Popen(['./receiver.py'], stdin=subprocess.PIPE,
> >                           shell=True)
> >
> > --
> > Qiangning Hong
> >
> > I'm usually annoyed by IDEs because, for instance, they don't use VIM
> > as an editor. Since I'm hooked to that, all IDEs I've used so far have
> > failed to impress me.
> >    -- Sybren Stuvel @ c.l.python
> >
> > Get Firefox!
> > <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>
> > _______________________________________________
> > python-chinese list
> > python-chinese at lists.python.cn
> > http://python.cn/mailman/listinfo/python-chinese
> >
> 
> _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
> 
> 
> 


-- 
Qiangning Hong

I'm usually annoyed by IDEs because, for instance, they don't use VIM
as an editor. Since I'm hooked to that, all IDEs I've used so far have
failed to impress me.
   -- Sybren Stuvel @ c.l.python

Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年07月14日 星期四 18:55

Jason Liu telecomliu at gmail.com
Thu Jul 14 18:55:48 HKT 2005

对,是我不求甚解了。
谢谢大家,尤其是Qiangning Hong 兄!

在 05-7-14,Qiangning Hong<hongqn at gmail.com> 写道:
> 在windows下试了一下,改成这样就可以
> 
> subproc = subprocess.Popen(['python', 'receiver.py'],
> stdin=subprocess.PIPE, shell=True)

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号