Popen對象
- poll() 判斷是否執行完畢,執行完畢返回0,未執行完畢返回None
- terminate() 終止進程發送SIGTERM信號
- raise 自定義返回錯誤
import time
import subprocess
class TimeoutError(Exception):
pass
def command(cmd, timeout=60):
"""執行命令cmd,返回命令輸出的內容。
如果超時將會拋出TimeoutError異常。
cmd - 要執行的命令
timeout - 最長等待時間,單位:秒
"""
p = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)
t_beginning = time.time()
seconds_passed = 0
while True:
if p.poll() is not None:
break
seconds_passed = time.time() - t_beginning
if timeout and seconds_passed > timeout:
p.terminate()
raise TimeoutError(cmd, timeout)
time.sleep(0.1)
return p.stdout.read()
if __name__ == "__main__":
print command(cmd='ping www.redicecn.com', timeout=1)
