[英]Running 3 python programs by a single program via subprocess.Popen method
我试图通过运行一个python程序同时运行3个python程序
我在单独的python程序sample.py中使用以下脚本
Sample.py:
import subprocess
subprocess.Popen(['AppFlatRent.py'])
subprocess.Popen(['AppForSale.py'])
subprocess.Popen(['LandForSale.py'])
包括python.py在内的所有三个程序都在同一文件夹中。
Error: OSError: [Errno 2] No such file or directory
有人可以指导我如何使用subprocess.Popen方法吗?
找不到文件,因为当前工作目录未正确设置。 在cwd="/path/to/script"
使用参数cwd="/path/to/script"
这是因为执行sample.py时,脚本不在当前目录中。 如果三个脚本与sample.py位于同一目录中,则可以使用:
import os
import subprocess
DIR = os.path.dirname(os.path.realpath(__file__))
def run(script):
url = os.path.join(DIR, script)
subprocess.Popen([url])
map(run, ['AppFlatRent.py','AppForSale.py', 'LandForSale.py'])
但老实说,如果我是你,我将使用bash脚本来实现。
在某些脚本中可能缺少shebang( #!..
),或者未设置可执行权限( chmod +x
)。
您可以显式提供Python可执行文件:
#!/usr/bin/env python
import inspect
import os
import sys
from subprocess import Popen
scripts = ['AppFlatRent.py', 'AppForSale.py', 'LandForSale.py']
def realpath(filename):
dir = os.path.realpath(os.path.dirname(inspect.getsourcefile(realpath)))
return os.path.join(dir, filename)
# start child processes
processes = [Popen([sys.executable or 'python', realpath(scriptname)])
for scriptname in scripts]
# wait for processes to complete
for p in processes:
p.wait()
以上假设脚本名称是相对于模块给出的。
请考虑使用threading
, multiprocessing
模块并发地导入模块并同时运行相应的功能,而不是直接将它们作为脚本运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.