繁体   English   中英

通过subprocess.Popen方法通过一个程序运行3个python程序

[英]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() 

以上假设脚本名称是相对于模块给出的。

请考虑使用threadingmultiprocessing模块并发地导入模块并同时运行相应的功能,而不是直接将它们作为脚本运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM