標籤:www port div lin 錯誤 sys encoding out cmd
環境:python 3.6
下面的例子,通過 subprocess 執行命令,重新導向並即時輸出,可修改重新導向到檔案或其他。
(注意:例子只適用於,遇到錯誤就停止執行的命令。)
一、執行 ping 命令
import subprocessimport sys# 常用編碼GBK = ‘gbk‘UTF8 = ‘utf-8‘# 解碼方式,一般 py 檔案執行為utf-8 ,cmd 命令為 gbkcurrent_encoding = GBKpopen = subprocess.Popen([‘ping‘, ‘www.baidu.com‘], stdout = subprocess.PIPE, stderr=subprocess.PIPE, bufsize=1)# 重新導向標準輸出while popen.poll() == None: # None表示正在執行中 r = popen.stdout.readline().decode(current_encoding) sys.stdout.write(r) # 可修改輸出方式,比如控制台、檔案等# 重新導向錯誤輸出if popen.poll() != 0: # 不為0表示執行錯誤 err = popen.stderr.read().decode(current_encoding) sys.stdout.write(err) # 可修改輸出方式,比如控制台、檔案等
二、執行 .py檔案
import subprocessimport sys# 常用編碼GBK = ‘gbk‘UTF8 = ‘utf-8‘# 解碼方式,一般 py 檔案執行為utf-8 ,cmd 命令為 gbkcurrent_encoding = UTF8 popen = subprocess.Popen([‘python‘, r‘D:\code\test.py‘‘], # 需要執行的檔案路徑 stdout = subprocess.PIPE, stderr=subprocess.PIPE, bufsize=1)# 重新導向標準輸出while popen.poll() == None: # None表示正在執行中 r = popen.stdout.readline().decode(current_encoding) sys.stdout.write(r) # 可修改輸出方式,比如控制台、檔案等# 重新導向錯誤輸出if popen.poll() != 0: # 不為0表示執行錯誤 err = popen.stderr.read().decode(current_encoding) sys.stdout.write(err) # 可修改輸出方式,比如控制台、檔案等
python 通過 subprocess 執行命令,重新導向即時輸出