我有一个python文件,比如A.py,它依赖于其他几个软件包/文件夹/文件让我们称之为B.py,C.py,D.py等。这些文件位于不同于A的位置的.py
A.py contents ::
import B, C, D
//other codes
我从另一个python脚本调用A.py,我们称之为1.py
1.py内容:
child_process = subprocess.Popen("python A.py", shell=True)
我在命令行中运行这样的1.py: python 1.py
我的问题是如何在子进程中将一系列依赖项(在本例中为B.py,C.py,D.py)传递给A.py以成功运行它。
我正在使用python 2.7
答案 0 :(得分:2)
您应该在python路径中正确安装B
/ C
/ D
个文件。
或者,您可以使用PYTHONPATH
环境变量:
child_process = subprocess.Popen(['python', 'A.py'], env={'PYTHONPATH': '/path/to/the/directory'})
其中/path/to/the/directory
是包含B
,C
和D
的目录的路径。
根据A.py
您可能需要传递的更多环境。这可以通过以下任一方式实现:
在父进程中设置env变量并让子进程继承它:
import os
os.environ['PYTHONPATH'] = '/path/...'
Popen(['python', 'A.py']) # by default it inherits parent env
或复制父环境:
new_env = dict(os.environ) # make a copy
new_env['PYTHONPATH'] = '/path/...'
Popen(['python', 'A.py', env=new_env)
注意:使用shell=True
是一种安全隐患。它也没用,而且效率低下。你应该避免它并将命令行作为字符串列表传递。