子进程Hexdump命令返回格式错误

问题描述

我正在利用子进程来抓取.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>

解决方法

没关系。我无法弄清楚,但是我用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))