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

时间:2020-08-19 01:15:27

标签: python-3.x subprocess 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>

1 个答案:

答案 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))