python - 将 python 对象从 python2 脚本传递到 python3 脚本
问题描述
我遇到了一个问题,我当前的流量生成器:Warp17 生成了仅与 python2 兼容的 python 代码。我们正在将所有其他内容移至 python3,因此我创建了一个包装我们的 warp17 api 的 cli 工具。有没有比仅打印输出并将其加载到 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
可以很好地理解 Python 2 数据,但对于 Python 版本之间数据类型的不同解释,需要牢记许多注意事项,尤其是bytes
:Unpickling a python 2 object with python 3
这是一个资源,可以帮助您解决在 Python 3 端取消选择的一些常见错误:TypeError: a bytes-like object is required, not 'str' when opening Python 2 Pickle file in Python 3
推荐阅读
- javascript - 在 type="module" 脚本中获取当前正在执行的脚本元素
- python - 从多通道图像中提取通道名称
- css - 在一行中创建多个 div,但可以自动换行
- css - 基于属性底值的条件css
- json - 解析嵌套的 JSON 字典 Ansible
- java - java中将十进制转二进制二进制转十进制,十进制转十六进制,十六进制转十进制的程序
- r - R:当输出长度与输入不同时使用映射
- mysql - 嵌套的 MySQL 在 WordPress 用户元表中选择问题
- python - 提取字符串中的单词并存储为列
- python - 为什么 python 不给我关闭 openCV 窗口的选项?