我使用Python 3.6.6 :: Anaconda,Inc。
我尝试使用子进程来调用其他python脚本。
subprocess.run("python -V", shell=True)
我尝试了这段代码,但结果是
Python 2.7.12
我的本地python被捕获
我也尝试过
subprocess.run("bash -c 'source /home/hclee/anaconda3/envs/calamari/lib/python3.6/venv/scripts/common/activate
/home/hclee/anaconda3/envs/calamari && python -V && source deactivate'", shell=True)
但是我得到了相同的结果
答案 0 :(得分:1)
在运行代码之前,先在Linux中运行source activate root
或在Windows中运行activate root
来激活环境。
如果这对您没有帮助,请尝试进行快速而肮脏的修复,例如:
subprocess.run('bash -c "source activate root; python -V"', shell=True)
您需要调用bash的原因是python的运行不会调用bash环境,而是另一个受约束更多且不包含source
的环境,因此这里我们需要调用bash ...但是如前所述,如果您需要此命令,则说明您正在执行某些特殊操作,或者您的环境有问题...
不需要停用,它不会执行任何操作,因为运行它的外壳会被破坏...
答案 1 :(得分:0)
我不认为在每次let teamData = this.filteredData.flatMap( team =>
team.SPRINTS.map( sprint => ({
TEAMNAME: team.TEAMNAME,
TEAMGROUP: team.TEAMGROUP,
...sprint
}) )
);
代码调用中都购买conda env是个好主意。
相反,您可以找到当前源环境的subprocess
目录,然后从那里获取二进制文件的完整路径。然后在要呼叫它们时将它们传递给bin
。
subprocess
打印的结果表明,子进程正在使用conda环境中的二进制文件,而不是基本(默认)env文件中的二进制文件。
import os
import sys
import subprocess
# what conda env am I in (e.g., where is my Python process from)?
ENVBIN = sys.exec_prefix
# what binaries am I looking for that are installed in this env?
BIN1 = os.path.join(ENVBIN, "bin", "ipython")
BIN2 = os.path.join(ENVBIN, "bin", "python")
BIN3 = os.path.join(ENVBIN, "bin", "aws")
# let's make sure they exist, no typos.
for bin in (BIN1, BIN2, BIN3):
assert os.path.exists(bin), "missing binary {} in env {}".format(bin, ENVBIN)
# then use their full paths when making subprocess calls
for bin in (BIN1, BIN2, BIN3):
cmd = ["which", bin]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
print(proc.communicate()[0].decode())