Running 3 python programs by a single program via subprocess.Popen method

孤者浪人 提交于 2019-12-25 02:19:55

问题


I am trying to run 3 python programs simultaneously by running a single python program

I am using the following script in a separate python program sample.py

Sample.py:

import subprocess
subprocess.Popen(['AppFlatRent.py'])
subprocess.Popen(['AppForSale.py'])
subprocess.Popen(['LandForSale.py'])

All the three programs including python.py is in the same folder.

Error:  OSError: [Errno 2] No such file or directory

Can someone guide me how can i do it using subprocess.Popen method?


回答1:


The file cannot be found because the current working directory has not been set properly. Use the argument cwd="/path/to/script" in Popen




回答2:


It's because your script are not in the current directory when you execute sample.py. If you three script are in the same directory than sample.py, you could use :

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'])

But honestly, if i was you i will do it using a bash script.




回答3:


There might be shebang missing (#!..) in some of the scripts or executable permission is not set (chmod +x).

You could provide Python executable explicitly:

#!/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() 

The above assumes that script names are given relative to the module.

Consider importing the modules and running corresponding functions concurently using threading, multiprocessing modules instead of running them as scripts directly.



来源:https://stackoverflow.com/questions/22631976/running-3-python-programs-by-a-single-program-via-subprocess-popen-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!