2012-05-03 105 views
1

我必須在Ubuntu中調用一個可執行文件......剛剛學會了如何在Windows中使用subprocess.Popen來完成這項工作。現在,我需要在Ubuntu中重複這一步。調用一個子進程

我已經使用了下面的Python命令:

a=subprocess.Popen("filename.exe",shell=0) 

回報是

Traceback (most recent call last): 
    File "/untitled0.py", line 29, in <module> 
    a=subprocess.Popen("filename.exe",shell=0) 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
OSError: [Errno 8] Exec format error 

如果我改變shell=1,有沒有投訴,但沒有輸出文件要麼產生。

我已經檢查此文件的使用file filename.exe 它返回的類型:

文件名.exe:ELF 64位LSB的可執行文件,X86-64,版本1(SYSV) 動態鏈接(使用共享庫),爲GNU/Linux 2.6.9,不 剝離

所以是有可能在Ubuntu使用subprocess.Popen稱呼它?

+1

你試圖在32位主機上運行64位二進制文​​件嗎?你可以顯示'uname -a'的輸出嗎? –

+0

這看起來像我的Ubuntu是32位,這可能會導致我的問題..我可以知道什麼是uname -a? –

+0

這是一個打印有關主機信息的命令,包括操作系統,主機名,內核版本,內核編譯時間和體系結構(從中可以知道它是否是a)。在我的32位筆記本電腦上,它打印出「Linux redance 2.6.26-2-686#1 SMP Thu Jan 27 00:28:05 UTC 2011 i686 GNU/Linux',而在我的64位服務器上打印'Linux red 2.6。 32-5-amd64#1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux'。 –

回答

3

快速閱讀python文檔,它看起來像你做正確的事情,所以。如何嘗試執行/ bin/false這應該是一個已知的工作exe在你的系統上。如果可行,那麼你的exe文件可能是錯誤的(在32位系統上可能是64位)

+0

它沒有抱怨喂/ bin/false,所以它看起來像我的exe是錯誤的。另外,shell = 0和shell = 1有什麼區別。謝謝 –

+0

如果shell = 1,那麼你並沒有執行一個文件,你將一個字符串傳遞給你的shell來評估(.e.g「ls -la〜/」) – imichaelmiers