2016-02-20 15 views
-2

讓我們考慮Linux平臺,我需要執行一個名爲smart.exe的程序,它使用input.dat文件。這兩個文件都放在同一目錄中,每個文件具有相同的文件權限777.爲什麼subprocess.call()在linux中顯示錯誤?

現在,如果我在終端窗口中運行以下命令,smart.exe將完全執行而不會出現任何錯誤。另一方面,如果我使用以下名爲my_script.py的python腳本放置在同一個目錄中,則會出現錯誤。

my_script.py具有下面的代碼:

#!/usr/bin/python 
import os, subprocess 

exit_code = subprocess.call("./smart.exe input.dat", shell = False) 

錯誤如下:

File "my_script.py", line 4, in <module> 
exit_code = subprocess.call("./smart.exe input.dat", shell = False) 
File "/usr/lib64/python2.6/subprocess.py", line 478, in call 

p = Popen(*popenargs, **kwargs) 
File "/usr/lib64/python2.6/subprocess.py", line 642, in __init__ 
    errread, errwrite) 
File "/usr/lib64/python2.6/subprocess.py", line 1234, in _execute_child 
raise child_exception 
OSError: [Errno 2] No such file or directory 

有人能告訴我爲什麼發生這種情況。請注意,smart.exe需要大約10秒才能完成。這可能是解決問題的線索。

另請告知是否有任何其他方式從my_script.py運行smart.exe。非常感謝您的解決方案!

+0

你怎麼意圖在Linux機器上運行一個Windows二進制文件?你是否在使用像葡萄酒這樣的東西? – albert

回答

2

您應該決定是否需要shell支持或不支持。

如果您想要使用shell(這裏沒有必要),您應該使用exit_code = subprocess.call("./smart.exe input.dat", shell=True)。然後shell解釋你的命令行。

如果你不想要它(因爲你不需要它並且想避免不必要的複雜性),你應該做exit_code = subprocess.call(["./smart.exe", "input.dat"], shell=False)

(而且沒有一點命名您的binarys Linux下.exe

相關問題