2012-10-11 37 views
0

我需要調用python腳本中的可執行文件,並將二進制數據(在同一腳本中生成)傳遞給此可執行文件。將二進制數據傳遞給os.system調用

我有工作,像這樣:

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

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

我以爲可以避開創建binaryInfo.bin把「本」直奔使用os.system調用共文件:

bin = make_config(data) 

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

但在這種情況下,我收到一個錯誤: 「無法將字節對象隱式轉換爲str」

有沒有人知道這裏的正確語法?這甚至有可能嗎?

+0

你試圖執行這個命令是什麼?它是否在命令行上收集數據*? –

回答

2

Does anyone know the correct syntax here? Is this even possible?

不喜歡你這樣做。您不能在UNIX命令行上傳遞任意二進制數據,因爲每個參數本質上都被視爲以空字符結尾,並且最大總長度限制通常爲64KB或更少。

隨着一些應用,其識別這種約定,你可以使用類似能管的數據標準輸入:

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

如果應用程序不能識別「 - 」標準輸入,不過,你可能不得不像你已經在做的那樣使用臨時文件。

+0

使用管道+1! :) –

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

應該這樣做。但是,我不知道,你應該通過命令行來發送二進制數據。字符數可能有某種限制。另外,這個東西實際上是否通過命令行接受二進制數據?

1

如何回合發送和解碼,另一端之前base64encoding它......據我所知命令行參數必須是ASCII範圍值(儘管這maynot是真的......但我認爲這是...)...

另一個選擇是做您當前所在的方式傳遞文件...

也許看到這個Passing binary data as arguments in bash