我正在編寫我的第一個python程序,我想運行一個shell命令並獲取輸出。我想用最乾淨/最pythonic的方式來做到這一點。這是我所掌握的。 注意:我還想在執行shell命令時發生異常時引發異常。從shell命令獲得輸出的最pythonic方法
def lsCommand():
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out , err = process.communicate()
returnc = process.returncode
if returnc != 0:
raise Exception(err)
else:
return out
我發現什麼,就是當我刪除行出來,ERR = process.communicate(),並用time.sleep(4)(<替換它= ls命令不採取4秒完成),返回碼是無,這意味着它的子進程尚未完成。這怎麼可能?是否out,err = process.communicate()執行隱式wait()方法調用?
def lsCommand():
process = subprocess.Popen(['ls', '-a'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(4)
returnc = process.returncode
if returnc != 0:
print returnc
raise Exception(err)
else:
return out
編輯:我使用python 2.7
我想做一個更長的命令須藤找到 「/媒體/ USB0」 型的F -name 「* .JPG」 | wc -l,但我不確定如何與Popen打電話,任何人都可以幫忙嗎?
我正在使用python 2.7,應該這麼說。抱歉。我將編輯我的問題 – Bosiwow
我已經閱讀了關於check_output的信息,我試圖使用它,但它不起作用,將再次嘗試。謝謝。你有沒有碰巧知道如何使用它像一個更長的命令,像sudo find ...在我的第一篇文章中? – Bosiwow
這是更pythonic,如果我不在乎err消息?:def lsCommand(): process = subprocess.check_output(['ls',' - l']) 返回進程 – Bosiwow