运行多个Python脚本

2 投票
3 回答
12353 浏览
提问于 2025-04-18 09:25

我想写一个简单的Python程序,让它同时运行两个独立的脚本。目前这两个脚本只是打印一串数字,但我打算将来用这个程序同时运行几个Twitter的流媒体程序。

我觉得我需要用到subprocess.Popen这个东西,但我不太明白应该传入什么参数。之前在StackOverflow上有类似的问题,不过那里的代码(我贴在下面)什么都没打印出来。希望你能帮帮我。

我的文件有:

thread1.py
thread2.py

import subprocess

subprocess.Popen(['screen', './thread1.py']))
subprocess.Popen(['screen', './thread2.py'])

3 个回答

1

你也可以打开几个命令提示符窗口,同时运行多个Python程序——每个窗口运行一个程序就可以了:

在每个命令提示符窗口中,先进入正确的文件夹(比如C:/Python27),然后在一个窗口里输入'python YourCodeNo1.py',在下一个窗口里输入'python YourCodeNo2.py',依此类推。

我现在就是用这种方法同时运行三个代码,运行速度一点也没有变慢。

1

使用 supervisord

supervisord 是一个进程管理系统,专门用来同时运行多个命令行脚本。

它的特点包括:

  • 可以管理多个进程
  • 自动重启失败的进程
  • 记录标准输出和错误输出的日志
  • 按照优先级顺序启动脚本
  • 提供命令行工具,可以查看最新的日志输出,停止、启动或重启进程

这个解决方案只适用于 *nix 系统,不支持 Windows。

1

正如wanderlust提到的,你为什么想要这样做,而不是通过Linux命令行呢?

另外,你提供的解决方案实际上是按照预期在工作,也就是说,你在命令行中执行的是:

screen ./thread1.py
screen ./thread2.py

这段代码会打开一个屏幕会话,并在这个会话中运行程序和输出内容,这样你就不会直接在终端上看到输出。如果你想查看输出,可以直接执行脚本,而不使用屏幕命令:

import subprocess

subprocess.Popen(['./thread1.py'])
subprocess.Popen(['./thread2.py'])

thread1.py的内容:

#!/usr/bin/env python
def countToTen():
  for i in range(10):
  print i

countToTen()

thread2.py的内容:

#!/usr/bin/env python
def countToHundreds():
for i in range(10):
  print i*100

countToHundreds()

然后别忘了在命令行中执行这个:

chmod u+x thread*.py

撰写回答