我需要在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”
有人知道这里的正确语法吗?这甚至可能吗?
答案 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范围值(虽然这可能不是真的......但我认为它是......)...
另一种选择是按照你现在的方式进行并传递文件......