我遇到了一个当前流量生成器的问题: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字典对象等。
答案 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 3方面取消选择:TypeError: a bytes-like object is required, not 'str' when opening Python 2 Pickle file in Python 3