如何从python程序中生成多个python脚本?

时间:2009-06-07 12:59:37

标签: python pexpect spawn tshark

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

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

我尝试过使用pexpectos.execlpos.forkpty,但他们都没有像我预期的那样。

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

是否有任何图书馆/最佳实践/等。完成这份工作?

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

4 个答案:

答案 0 :(得分:5)

请参阅subprocess module

  

子进程模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。该模块旨在替换其他几个较旧的模块和功能,例如:

     

使用os.system

     

os.spawn *

     

os.popen *

     

popen2。*

     

命令。*

答案 1 :(得分: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

答案 2 :(得分:0)

您想将一个终端 专用于一个python shell吗?

你已经为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中制作一堆终端,你只需要替换' python'在pextpext.spawn行

注意:我还没有测试过上面的代码。我只是回答过去与pexpect的经历。

答案 3 :(得分:0)

从Python 3.5开始,您可以执行以下操作:

    import subprocess

    result = subprocess.run(['python', 'my_script.py', '--arg1', val1])
    if result.returncode != 0:
        print('script returned error')

这还会自动重定向stdout和stderr。