2010-12-22 44 views
0

我已經閱讀了發佈在相同參數上的以前的問題,但我還沒有弄明白。Popen無法處理在shell中運行的命令

我試圖運行,沒有問題工作的命令行命令:

[email protected]:~/python-remoteWorkspace/PyLogParser/src:18:43>ush -o PPP -p PRD -n log 'pwd' 
6:43PM PPP:prd:lgsprdppp:/ama/log/PRD/ppp 

但是當我做相同的蟒蛇,我總是得到錯誤:

stringa = Popen(["ush -o PPP -p PRD -n log 'pwd'"], stdout=PIPE, stdin=PIPE).communicate()[0] 

在這裏的錯誤。

Traceback (most recent call last): File "getStatData.py", line 134, in <module> 
    retrieveListOfFiles(infoToRetList) File "getStatData.py", line 120, in retrieveListOfFiles 
    stringa = Popen(["ush -o PPP -p PRD -n log 'pwd'"], stdout=PIPE, stdin=PIPE).communicate()[0] File "/opt/python-2.6-64/lib/python2.6/subprocess.py", line 595, in __init__ 
    errread, errwrite) File "/opt/python-2.6-64/lib/python2.6/subprocess.py", line 1092, in _execute_child 
    raise child_exception OSError: [Errno 2] No such file or directory 

我也嘗試了不同的解決方案,如

stringa = Popen(["ush", "-o", "PPP", "-p" "PRD", "-n", "log", '"pwd"'], stdout=PIPE, stdin=PIPE).communicate()[0] 

,但似乎沒有任何工作。我也試圖把絕對的道路,但沒有什麼... 有人可以請解釋我,我做錯了什麼?

在此先感謝,AM。

編輯: 我有一個奇怪的事情發生了,當我做

which ush 

我得到

ush: aliased to nocorrect /projects/aaaaaaa/local/ush/latest/ush.py 

但是爲什麼它那麼工作???

!!!謝謝大家的答案!

+0

'ush -o PPP -p PRD -n log'pwd'從命令行工作嗎? – user225312 2010-12-22 18:01:52

+0

當然,上面的迴應是PPP:prd:lgsprdppp:/ ama/log/PRD/ppp – wheisenberg 2010-12-22 18:02:51

+0

請改善格式。在插入代碼塊時,使用`{}`。 – user225312 2010-12-22 18:04:36

回答

1

如果您的系統上的ush是別名,則popen將不起作用。 popen需要一個可執行文件作爲第一個參數:絕對路徑或PATH中的某個東西的名稱。

2
Popen(["ush", "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"]) 

應該是正確的。 shell命令中的'pwd'附加引號使其成爲單個參數,但引號實際上並未傳遞。既然你已經分裂了論點,留下額外的引號。


顯然(在OP的更新中)ush是一個shell別名。因此,它只在外殼中擴展;在其他地方,它將無法工作。自己擴展:

Popen(["nocorrect", "/projects/aaaaaaa/local/ush/latest/ush.py", 
     "-o", "PPP", "-p", "PRD", "-n", "log", "pwd"])