gpt4 book ai didi

python - 如何使用 marshalled python 编写 p4 更改更改列表创建脚本

转载 作者:行者123 更新时间:2023-11-30 23:14:49 24 4
gpt4 key购买 nike

我正在尝试使用 -G 全局选项编写新的 p4 更改列表创建脚本。这与 -i 命令标志相结合应该允许我通过 stdin 作为编码的 python 字典传递更改列表描述。不幸的是,我找不到 p4 记录此代码格式的任何地方。

如果我使用编码字典查看现有的更改列表,我会看到以下内容:

>>> argx=["/usr/bin/p4","-G", "change", "-o", "12345"]
>>> p=subprocess.Popen(argx, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> c=p.communicate()
>>> c
>>> marshal.loads(c[0])
{'Status': 'pending', 'code': 'stat', 'Description': 'test\t\n', 'Client': 'myclient', 'User': 'me', 'Date': '2015/02/18 18:36:34', 'Type': 'public', 'Change': '12345'}

所以我尝试用这种方式创建一个:

>>> x={'Change': 'new', 'Status': 'new', 'Description': "p4test"}
>>> y=marshal.dumps(x)
>>> args=["/usr/bin/p4","-G", "-d", "/tmp", "change", "-i"]
>>> p=subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> c=p.communicate(y)
>>> marshal.loads(c[0])
{'generic': 34, 'code': 'error', 'data': 'Invalid marshalled data supplied as input.\n', 'severity': 3}

(这不是很有帮助)但如果我查看未编码的返回值,我会发现其中嵌入了:

('{s\x04\x00\x00\x00codes\x05\x00\x00\x00errors\x04\x00\x00\x00datas+\x00\x00\x00作为输入提供的无效编码数据。\ns\x08\x00\x00\x00severityi\x03\x00\x00\x00s\x07\x00\x00\x00generici"\x00\x00\x000{s\x04\x00\x00\x00codes\x05\x00\x00\x00errors\x04\x00\x00\x00datas@\x00\x00\x00更改规范出错。\n缺少必填字段“更改”。\ns\x08\x00\x00\x00severityi\x03\x00\x00\x00s\x07\x00\x00\x00generic\x04\x00\x00\x000', '')

所以1.消息的编码和解码方式不兼容,我没有看到具体的错误消息,但我的“更改”字段格式有问题,或 2. 缺少必填字段消息是由于 p4 编码(marshal)代码中的脏缓冲区引起的转移注意力。

无论如何,我不知道如何做到这一点。有什么建议么?我试图避免引入 p4 python API,因为考虑到在 P4 中编写大多数内容(不涉及编辑器)的脚本是多么容易,它应该是不必要的。不过,我现在要开始调查这一点,因为我已经对此进行了太多的尝试。

最佳答案

我认为您只需更改 dumps 调用即可指定数据格式的版本,如下所示:

y=marshal.dumps(x, 0)

参见https://docs.python.org/2/library/marshal.html#marshal.version有关 marshal 模块数据格式版本的详细信息。

Perforce 知识库也有一些与此相关的信息,但您必须知道要搜索什么才能找到它!几年前我偶然发现了同样的问题,并花了几天时间来解决该问题。

http://answers.perforce.com/articles/KB/3518/?l=en_US&fs=RelatedArticle

When using "marshal.dump()" in Python 2.4 or later, you must specify version "0" of the dump format or P4 cannot understand the data that is being sent.

我刚刚测试了它,我可以使用作为输入传递的手动构建的字典成功创建一个新的更改列表。

关于python - 如何使用 marshalled python 编写 p4 更改更改列表创建脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28596481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com