我试图通过运行单个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方法吗?
答案 0 :(得分:0)
找不到该文件,因为当前工作目录未正确设置。在Popen中使用参数cwd="/path/to/script"
答案 1 :(得分:0)
这是因为执行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脚本来做。
答案 2 :(得分:0)
某些脚本中可能缺少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
模块导入模块并运行相应的函数,而不是直接将它们作为脚本运行。