Python子流程:从64位环境中在32位conda环境中启动脚本

时间:2017-09-20 07:25:43

标签: python subprocess environment conda

我正试图从python 64位conda环境中启动Windows 7上32位conda环境中的另一个python脚本。

不幸的是,我无法让它工作,我成功地启动了相同的环境:

在conda py35 env(64位)

import subprocess, json, shlex
arg1, arg2 = 1,2
args = shlex.split('python myScript.py {} {}'.format(arg1, arg2))
######################## Call subprocess
process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.wait()
stdout, stderr = process.communicate()
jsonData = stdout.decode()
data = json.loads(jsonData)
print(data)

文件myScript.py应该在py34 env(32位)

中运行
import sys, json  
arg1, arg2 = sys.argv[1], sys.argv[2]
out1, out2 = int(arg2), int(arg1) #out1, out2 = some_function(arg1, arg2)
jsonData = json.dumps({'out1' : out1, 'out2' : out2})
print(jsonData)

此示例工作并输出我想要的{'out1': 2, 'out2': 1},但myScript.py未在32位env内运行,这是一项要求,因为我将使用仅在32位上运行的一些遗留函数。

我尝试使用以下内容将呼叫更改为subprocess

process = subprocess.Popen(args, env = 'C:\Appl\Miniconda3_32bits\envs\py34\Scripts\activate', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
AttributeError: 'str' object has no attribute 'values'

或者接下来的两个电话:

process = subprocess.Popen(['CALL', 'C:\Appl\Miniconda3_32bits\envs\py34\Scripts\activate'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process.communicate(args)

File "C:\Appl\Minconda3_64bits\envs\py35\lib\subprocess.py", line 955, in _execute_child
startupinfo)
FileNotFoundError

或者通过更改参数:

args = shlex.split('CALL C:\Appl\Miniconda3_32bits\envs\py34\Scripts\activate python myScript.py {} {}'.format(arg1, arg2))

如果您有任何关于如何使其正常工作的建议。我之前只发现了在同一环境中启动新进程的问题。我很困惑如何让它工作,如果我的尝试是以pythonic方式解决这个问题的最好方法。

0 个答案:

没有答案