I have a script a.py
and while executing it will ask certain queries to user and frame the output in json format. Using python subprocess, I am able to call this script from another script named b.py
. Everything is working as expected except that I am not able to get the output in a variable? I am doing this in Python 3.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
To call a Python script from another one using subprocess
module and to pass it some input and to get its output:
#!/usr/bin/env python3
import os
import sys
from subprocess import check_output
script_path = os.path.join(get_script_dir(), \'a.py\')
output = check_output([sys.executable, script_path],
input=\'\\n\'.join([\'query 1\', \'query 2\']),
universal_newlines=True)
where get_script_dir()
function is defined here.
A more flexible alternative is to import module a
and to call a function, to get the result (make sure a.py
uses if __name__==\"__main__\"
guard, to avoid running undesirable code on import):
#!/usr/bin/env python
import a # the dir with a.py should be in sys.path
result = [a.search(query) for query in [\'query 1\', \'query 2\']]
You could use mutliprocessing
to run each query in a separate process (if performing a query is CPU-intensive then it might improve time performance):
#!/usr/bin/env python
from multiprocessing import freeze_support, Pool
import a
if __name__ == \"__main__\":
freeze_support()
pool = Pool() # use all available CPUs
result = pool.map(a.search, [\'query 1\', \'query 2\'])
回答2:
Another way than mentioned, is by using the built-in funtion exec
This function gets a string of python code and executes it
To use it on a script file, you can simply read
it as a text file, as such:
#dir is the directory of a.py
#a.py, for example, contains the variable \'x=1\'
exec(open(dir+\'\\\\a.py\').read())
print(x) #outputs 1