在不同的conda环境中调用另一个python脚本(使用子过程)

时间:2019-06-07 14:33:26

标签: python bash subprocess

我有两个脚本A.pyB.py,它们在Ubuntu 18.04计算机上的不同conda环境中运行。

我想使用A.py来调用B.py,方法是打开bash外壳,依次调用“ conda activate envB”和“ python B.py args”。但是,以下两种尝试均无效:

尝试1):

import subprocess

subprocess.call(['conda', 'activate', 'envB'])

for i in range(10):
    subprocess.call(['python', 'B.py', i])
  • 我收到一条错误消息,提示未正确设置conda:CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'. To initialize your shell, run .....

  • 我尝试添加subprocess.call(['source', '~/.bashrc'])来设置环境路径,但是shell似乎在抱怨No such file or directory: 'source': 'source'

尝试2)

subprocess.call(['/bin/bash', '-i', '-c', "conda activate myenv"])
subprocess.call(['/bin/bash', '-i', '-c', "echo $(which python) >> test.txt"])
for i in range(10):
    subprocess.call(['/bin/bash', '-i', '-c', "python B.py -{}".format(i)])
  • 这似乎没有激活myenv。在第一个命令之后,有什么方法可以使外壳保持打开状态吗?
  • 这似乎还创建了一个后台进程,该进程在我终止A.py之后将继续运行。 B.py似乎在后台运行,但是我无法使用bash杀死它。

尝试3)

我也尝试使用os.system(command),但无法弄清楚如何使用os.system加载环境变量。 因此,这也不起作用:How to call anaconda environment to run specific package of python(2.7) from other python(3.7) script via os.system()?

0 个答案:

没有答案