2009-06-07 32 views
3

我想从我的程序中生成(fork?)多个Python脚本(用Python编写)。如何从python程序中产生多个python脚本?

我的问题是,我想专用一个终端到每个脚本,因为我会收集他们的输出使用pexpect

我试过使用pexpectos.execlpos.forkpty,但他们都没有按照我的预期。

我想生成子进程并忘记它们(它们将处理一些数据,将输出写入终端,我可以用pexpect读取并退出)。

有没有图书馆/最佳实践/等。完成这项工作?

p.s.在你问我为什么要写入STDOUT并从中读取数据之前,我会说我不写入STDOUT,我读取了tshark的输出。

回答

5

参见subprocess module

subprocess模块​​允许你产卵新工艺,连接到它们的输入/输出/错误管道,并获得它们的返回代码。该模块打算更换其他几个,旧的模块和功能,如:

使用os.system

os.spawn *

os.popen *

popen2 *

。命令。*

0

我不明白你为什么需要这样做。 tshark应该将其输出发送到stdout,并且只是出于某种奇怪的原因将它发送到stderr。

因此,你想应该是什么:

import subprocess 

fp= subprocess.Popen(("/usr/bin/tshark", "option1", "option2"), stdout=subprocess.PIPE).stdout 
# now, whenever you are ready, read stuff from fp 
0

您要为一个终端一个蟒蛇的壳呢?

对于Popen和Subprocess你已经有了一些有用的答案,如果你已经计划使用它,你也可以使用pexpect。

#for multiple python shells 
import pexpect 

#make your commands however you want them, this is just one method 
mycommand1 = "print 'hello first python shell'" 
mycommand2 = "print 'this is my second shell'" 

#add a "for" statement if you want 
child1 = pexpect.spawn('python') 
child1.sendline(mycommand1) 

child2 = pexpect.spawn('python') 
child2.sendline(mycommand2) 

,你想要让尽可能多的孩子/壳,然后使用child.before()或child.after()得到您的答复。

当然,您想要添加要发送的定义或类而不是“mycommand1”,但这只是一个简单的示例。

如果你想让一帮在Linux终端,你只需要在pextpext.spawn线更换的python

注:我没有测试上面的代码。我只是从过去的经验中回答。

相关问题