我正在利用子进程来抓取.tgz文件的hexdump,因为我需要hex字符串。唯一的问题是,hexdump会引发错误的格式错误,但仅当命令通过子流程发出时才发生。我相信我已经正确地逃避了一切,但是我不知道为什么我没有得到预期的输出:
def package_plugin():
plugin_hex = subprocess.run(["hexdump", "-v", "-e", "'1/1 \"\\\\x%%02x\"'", "package.tgz"])
这会导致错误: hexdump:“'1/1”''x %% 02x“'”:格式错误。但是,如果我只是直接在终端中运行命令,则会收到预期的十六进制字符串输出,其中用'\ x'分隔十六进制。
我应该如何运行它以将输出存储在Python变量中?我的命令是否以某种方式被扭曲,因此无法正确执行?任何建议表示赞赏。 谢谢
编辑:我应该补充一点,当输入终端命令时,命令是hexdump -v -e '1/1 "\\x%02x"'
,我不确定为什么在错误中显示了额外的'%'符号,因为它应该解释为单个%符号。 / p>
答案 0 :(得分:0)
没关系。我无法弄清楚,但是我用hexlify解决了这个问题:
def package_plugin():
plugin_hex = ""
with open('plugin.tgz', 'rb') as f:
for chunk in iter(lambda: f.read(32), b''):
plugin_hex += binascii.hexlify(chunk).decode("utf-8")
formatted_hex = '\\x' + '\\x'.join(plugin_hex[i:i+2] for i in range(0, len(plugin_hex), 2))