简体   繁体   中英

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

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?

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

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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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