将python对象从python2脚本传递到python3脚本

时间:2018-08-16 14:44:51

标签: python python-3.x python-2.7

我遇到了一个当前流量生成器的问题: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字典对象等。

1 个答案:

答案 0 :(得分:1)

字典的二进制表示形式以及实际上的对象在Python 2和Python 3之间已经发生了很大变化,这意味着您将无法直接在Python版本之间使用这些对象。有必要将某种形式的序列化为相互接受的格式。

您使用的JSON格式符合此条件。我建议您坚持使用它,因为它具有灵活性,可读性并且相当通用。

如果空间成为问题,您可以考虑采用酸洗作为替代方案,但我不建议您将其作为首选。尽管pickle.load可以很好地理解Python 2数据,但是要记住很多注意事项,尤其是// "kartik-v/yii2-widget-datepicker" var $hasDatepicker = $(widgetOptionsRoot.widgetItem).find('[data-krajee-kvdatepicker]'); if ($hasDatepicker.length > 0) { $hasDatepicker.each(function () { // $(this).parent().removeData().kvDatepicker('remove'); // here is the solution $(this).parent().find('.krajee-datepicker').kvDatepicker(eval($(this).attr('data-krajee-kvdatepicker'))); }); } Unpickling a python 2 object with python 3

在Python版本之间对数据类型的不同解释

此处提供的资源可能会帮助您解决一些不常见的错误,包括从Python 3方面取消选择:TypeError: a bytes-like object is required, not 'str' when opening Python 2 Pickle file in Python 3