1

我需要在 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”

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

4

3 回答 3

2

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

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

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

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

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

于 2012-10-11T20:46:54.630 回答
1
os.system(b"something.exe " + bin)

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

于 2012-10-11T20:46:49.980 回答
1

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

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

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

于 2012-10-11T20:46:54.183 回答