【问题标题】:Pass binary data to os.system call将二进制数据传递给 os.system 调用
【发布时间】:2012-10-11 20:41:55
【问题描述】:

我需要在 python 脚本中调用一个可执行文件,并将二进制数据(在同一脚本中生成)传递给这个可执行文件。

我的工作方式是这样的:

bin = make_config(data)
open('binaryInfo.bin', 'wb+').write(bin)

os.system("something.exe " + "binaryInfo.bin")

我认为我可以通过将“bin”直接传递给 os.system 调用来完全避免创建 binaryInfo.bin 文件:

bin = make_config(data)

os.system("something.exe " + bin)

但在这种情况下,我得到一个错误: “无法将 'bytes' 对象隐式转换为 str”

有人知道这里的正确语法吗?这甚至可能吗?

【问题讨论】:

  • 您要执行的命令是什么?它是否在命令行上获取数据完全

标签: python os.system


【解决方案1】:

有人知道这里的正确语法吗?这甚至可能吗?

不像你这样做。您不能在 UNIX 命令行上传递任意二进制数据,因为每个参数本质上都被视为以空值结尾,并且最大总长度限制通常为 64KB 或更小。

一些应用程序可以识别此约定,您可以使用以下方式在标准输入上传输数据:

pipe = os.popen("something.exe -", "w")
pipe.write(bin)
pipe.close()

但是,如果应用程序无法识别标准输入的“-”,您可能不得不使用一个临时文件,就像您已经在做的那样。

【讨论】:

    【解决方案2】:
    os.system(b"something.exe " + bin)
    

    应该这样做.. 但是,我不确定您是否应该通过命令行发送二进制数据。字符数可能有某种限制。另外,这个something.exe是否真的通过命令行接受二进制数据?

    【讨论】:

      【解决方案3】:

      如何在另一端发送和解码之前对其进行 base64encoding...afaik 命令行参数必须是 ascii 范围值(尽管这可能不是真的...但我认为它是..)...

      另一种选择是按照您当前的方式进行操作并传递文件...

      或者也许看到这个Passing binary data as arguments in bash

      【讨论】:

        猜你喜欢
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        相关资源
        最近更新 更多