2016-11-11 53 views
0

試圖寫的函數作出決定。例如之前讀取一個外殼命令的輸出:蟒呼叫外殼命令並檢查響應

6 def getCreds(): 
    7   global access_key, secret_key, yourName 
    8   access_key = raw_input("Enter Access Key: ") 
    9   secret_key = raw_input("Enter Secret Key: ") 
10   infoCorrect = raw_input('Is this information correct? (y or n)') 
11   if infoCorrect.lower() == "yes" or infoCorrect.lower() =="y": 
12     call (["./somecommand -u %s -p %s -flags" % (access_key, secret_key) +  tfdir],shell=True) 
13   else: 

外殼命令的輸出或者是

"You have successfully logged in" 
or 
"you cannot log in" 

所以我不知道正確的語法去:

if response = "You have successfully logged in" : 
(some action) 
elif: 
(some action) 

如何我讀的反應呢?

謝謝!

+0

如果你經常這樣做,有便利包裝可用。其中之一:https://github.com/Chiel92/python-shellout(免責聲明:我寫的) –

+0

@chowpay,你的問題解決了嗎? – Shasha99

回答

1

使用Popen()定義在subprocess中的方法並將您的輸出重定向到PIPE。試試這個代碼:

import subprocess 

p = subprocess.Popen("ls", shell=True, stdout = subprocess.PIPE) 
output,err = p.communicate() 
print(output) 
1

我不認爲可以返回shell命令的輸出。您只能檢查命令是否成功或返回錯誤。

話雖如此,你可以重定向你的輸出到一個文件,然後檢查它的內容。

f = open("outputFile","wb") 
    call (["./somecommand -u %s -p %s -flags" % (access_key, secret_key) +  tfdir],shell=True,stdout=f) 

如果你想避免寫入文件,那麼你可能想看看StringIO模塊。

+0

有沒有更好的方法來做到這一點,而不是使用shell命令?你有什麼建議? – chowpay

+0

更好的做法是什麼? 我的意思是你的問題說你想得到你的shell命令的輸出,所以得到一個你必須執行的shell命令的輸出, 你的shell命令到底做了什麼?可能有辦法使用Python庫實現相同的功能 –

+0

對不起,我的意思是說如果有更好的方式使用通過python發出的shell命令的響應。這個shell命令「./somecommand」只是把用戶名和密碼發送到web服務。如果服務成功返回「您已成功登錄」的回覆。使用'call'是我知道如何在python中發出shell命令的唯一方法。但我想知道是否有更好的方法來在python中發出這個命令並評估響應。就像你說的,也許是我不知道的一些Python庫。謝謝 - python n00b – chowpay