簡體   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