[英]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.