简体   繁体   中英

running a .py file from another Python script using os

Can someone give me a tip on how I can use os to run a different .py file from my python script? This code below works, but only because I specify the complete file path.

How can I modify the code to incorporate running plots.py from the same directory as my main script app.py ? Im using Windows at the moment but hoping it can work on any operating system. Thanks

import os

os.system('py C:/Users/benb/Desktop/flaskEconServer/plots.py')

You can execute an arbitrary Python script as a separate process using the subprocess.run() function something like this:

import os
import subprocess
import sys

#py_filepath = 'C:/Users/benb/Desktop/flaskEconServer/plots.py'
py_filepath = 'plots_test.py'

args = '"%s" "%s" "%s"' % (sys.executable,                  # command
                           py_filepath,                     # argv[0]
                           os.path.basename(py_filepath))   # argv[1]

proc = subprocess.run(args)
print('returncode:', proc.returncode)

If you would like to communicate with the process while it's running, that can also be done, plus there are other subprocess functions, including the lower-level but very general subprocess.Popen class that support doing those kind of things.

Python has built-in support for executing other scripts, without the need for the os module.

Try:

from . import plots

If you want to execute it in an independent python process, look into the multiprocessing or subprocess modules.

You can get the directory of the app.py file by using the following call in app.py

dir_path = os.path.dirname(os.path.realpath(__file__))

then join the file name you want

file_path = os.path.join(dir_path,'plot.py')

Finally your system call

os.system(f'py {file_path}') # if you're on 3.6 and above.
os.system('py %s' % file_path) # 3.5 and below

As others have said sub-processes and multi-threading may be better, but for your specific question this is what you want.

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