簡體   English   中英

將python對象從python2腳本傳遞到python3腳本

[英]Passing a python object from a python2 script to python3 script

我遇到了一個當前流量生成器的問題:Warp17生成了僅與python2兼容的python代碼。 我們將所有其他內容都移至python3,因此我創建了一個cli工具,用於包裝warp17 api。 有沒有比僅打印輸出並將其加載到json中更好的傳遞下標信息的方法?

#!/usr/bin/python

import python2_api

if __name__ == "__main__":
  do_some_argparse()
  result = dict(run_some_code_on_args())
  print(result)

def run_warp_cli(*args):
  result = subprocess.Popen('warp_cli', args)
  return json.loads(result)

這基本上就是我正在做的。 我很好奇是否有任何有趣的方法可以避免這樣做,並返回實際的python字典對象等。

字典(實際上是對象)的二進制表示形式在Python 2和Python 3之間發生了很大變化。這意味着您將無法直接在Python版本之間使用這些對象。 某種形式的序列化為相互可接受的格式將是必要的。

您使用的JSON格式符合此條件。 我建議您堅持使用它,因為它具有靈活性,易於閱讀且通用性強。

如果空間不足成為問題,您可以考慮將酸洗作為替代方法,但我不建議您將其作為首選。 盡管pickle.load可以pickle.load地理解Python 2數據,但是要記住許多警告,因為在不同版本的Python之間,尤其是bytes之間,對數據類型的解釋不同: 用python 3解開python 2對象

這是一個資源,可以幫助您解決一些不常見的錯誤(從Python 3方面取消選擇): TypeError:在Python 3中打開Python 2 Pickle文件時,需要一個類似字節的對象,而不是'str'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM