繁体   English   中英

python3的exec()python2脚本

[英]exec() python2 script from python3

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

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

py3中调用上述py2脚本的行是

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

该脚本运行无错误,直到开始处理python2script.py为止,此时该脚本在与python2script.py的第一个差异时崩溃。

正如评论所指出的那样, exec()使用当前的python实现,因此您无法使用它从python 3执行python 2代码。

除非您移植它,否则最好的选择就是简单地使用os.system ..将其称为子过程:

./py3.py

#!/usr/bin/env python3
import os

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

./py2.py

#!/usr/bin/env python2.7
print "hello from python2!"

然后(使它们两个都可执行)运行:

$ ./py3.py

或者,您也可以使用更灵活的subprocess ,该subprocess允许您使用诸如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版本的用户身份运行。 也许您不能使文件可执行,因此必须在子进程/os.system调用中指定python的路径。 有很多选择,而且非常复杂,但是超出了问题的范围。 您只需要非常仔细地阅读文档页面,然后尝试一些操作!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM