#!/usr/bin/env python3
import json
from subprocess import PIPE, Popen
print('running py2')
py2_proc = Popen(['./py2.py'], stdout=PIPE)
# do not care about stderr
stdout, _ = py2_proc.communicate()
result = json.loads(stdout.decode())
print('value1 was %s, value2 was %s' % (result['value1'], result['value2']))
正如注释所指出的,
exec()
使用当前的python实现,因此不能使用它从python3执行python2代码。在除非将其移植,否则最好的办法是将其作为子进程调用,使用^{} ..:
./py3.py
./py2.py
^{2}$然后(在使它们都可执行之后)运行:
或者,您也可以使用更灵活的^{} ,它允许您使用诸如json之类的序列化模块更容易地来回传递数据,这样您就可以从python3代码中的python2脚本获得结果:
./py3.py
./py2.py
这样就可以很容易地将所需的数据打包并传输过来。在
注意:我使用系统的python2.7和python3在这里使用了一个非常简单的环境设置。在现实世界中,让这种事情正常工作最痛苦的事情就是正确配置环境。例如,您可能正在使用虚拟环境。也许你是以一个用户的身份运行的,而这个用户的路径中没有正确的python2版本。也许您无法使文件可执行,因此必须在子进程/操作系统打电话。有许多选择,这是非常复杂的,但超出了问题的范围。你只需要非常仔细地阅读doc页面并尝试一些东西!在
相关问题 更多 >
编程相关推荐