如何从Python程序中启动多个Python脚本?

4 投票
4 回答
4385 浏览
提问于 2025-04-15 12:05

我想从我的程序中启动多个Python脚本(我的程序也是用Python写的)。

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

我试过使用pexpectos.execlpos.forkpty,但都没有达到我想要的效果。

我想启动这些子进程,然后就不再管它们了(它们会处理一些数据,把输出写到终端,我可以用pexpect读取这些输出,然后退出)。

有没有什么库或者最佳实践可以做到这一点呢?

顺便说一下,在你问我为什么要写入STDOUT并从中读取之前,我想说的是,我并不是写入STDOUT,而是读取tshark的输出。

4 个回答

0

我不明白为什么你需要用 expect 来处理这个。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
1

从Python 3.5开始,你可以这样做:

    import subprocess

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

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

5

可以查看一下 subprocess模块

subprocess模块让你可以创建新的进程,连接到它们的输入、输出和错误信息,并获取它们的返回代码。这个模块的目的是替代一些旧的模块和函数,比如:

os.system

os.spawn*

os.popen*

popen2.*

commands.*

撰写回答