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

4

我想从我的Python程序(同样用Python编写)中启动(fork?)多个Python脚本。

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

我尝试过使用pexpectos.execlpos.forkpty,但它们都没有按照我的期望执行。

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

有没有任何库/最佳实践等可以完成这项工作?

p.s. 在你问我为什么要写到STDOUT并从中读取之前,我应该说我不写到STDOUT,我读取tshark的输出。

4个回答

5
请查看subprocess模块
子进程模块允许您生成新的进程,连接其输入/输出/错误管道,并获取它们的返回代码。该模块旨在取代其他几个较旧的模块和函数,例如:
- os.system - os.spawn* - os.popen* - popen2.* - commands.*

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

    import subprocess

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

这还会自动重定向标准输出和标准错误流。

0

我不明白为什么你需要这个expect。 tshark 应该将其输出发送到标准输出,只有出现某些奇怪的情况才会将其发送到标准错误。

因此,你想要的应该是:

import subprocess

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

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)

可以创建任意数量的子进程/ Shell,然后使用child.before()或child.after()获取响应。

当然,您可能希望添加定义或类以替换“mycommand1”,但这只是一个简单的示例。

如果您想在Linux上创建一堆终端,只需要在pexpect.spawn行中替换'python'

注意:我没有测试上面的代码。 我只是根据过去使用pexpect的经验进行回复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接