将二进制数据传递给os.system调用

时间:2012-10-11 20:41:55

标签: python os.system

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

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

3 个答案:

答案 0 :(得分:2)

  

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

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

使用一些识别此约定的应用程序,您可以使用以下内容在stdin上管道数据:

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

但是,如果应用程序无法识别stdin的“ - ”,那么您可能必须使用像您一直在做的临时文件。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

另一种选择是按照你现在的方式进行并传递文件......

或者可能会看到此Passing binary data as arguments in bash