繁体   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