从python3()执行脚本

2024-06-26 13:58:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以从python3脚本执行python2脚本。在

我有一个使用py3编写的文件,它必须执行py2中编写的遗留代码,以获取字典以便在初始文件中进行处理。在

py3中调用提到的py2脚本的行是

exec(open('python2script.py').read())

脚本一直运行,直到它开始处理python2script.py,此时它在版本3的第一个差异处崩溃。在


Tags: 文件代码py版本脚本read字典py3
1条回答
网友
1楼 · 发布于 2024-06-26 13:58:19

正如注释所指出的,exec()使用当前的python实现,因此不能使用它从python3执行python2代码。在

除非将其移植,否则最好的办法是将其作为子进程调用,使用^{}..:

./py3.py

#!/usr/bin/env python3
import os

print('running py2')
os.system('./py2.py')
print('done')

./py2.py

^{2}$

然后(在使它们都可执行之后)运行:

$ ./py3.py

或者,您也可以使用更灵活的^{},它允许您使用诸如json之类的序列化模块更容易地来回传递数据,这样您就可以从python3代码中的python2脚本获得结果:

./py3.py

#!/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']))

./py2.py

#!/usr/bin/env python2.7
import json

my_result = {
    'value1': 1,
    'value2': 3
}
print json.dumps(my_result)

这样就可以很容易地将所需的数据打包并传输过来。在

注意:我使用系统的python2.7和python3在这里使用了一个非常简单的环境设置。在现实世界中,让这种事情正常工作最痛苦的事情就是正确配置环境。例如,您可能正在使用虚拟环境。也许你是以一个用户的身份运行的,而这个用户的路径中没有正确的python2版本。也许您无法使文件可执行,因此必须在子进程/操作系统打电话。有许多选择,这是非常复杂的,但超出了问题的范围。你只需要非常仔细地阅读doc页面并尝试一些东西!在

相关问题 更多 >