python 通過 subprocess 執行命令,重定向實時輸出
阿新 • • 發佈:2018-07-31
out www. stdout err stderr class 解碼 Coding ces
環境:python 3.6
下面的例子,通過 subprocess 執行命令,重定向並實時輸出,可修改重定向到文件或其他。
(註意:例子只適用於,遇到錯誤就停止執行的命令。)
一、執行 ping 命令
import subprocess import sys # 常用編碼 GBK = ‘gbk‘ UTF8 = ‘utf-8‘ # 解碼方式,一般 py 文件執行為utf-8 ,cmd 命令為 gbk current_encoding = GBK popen = 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 subprocess import sys # 常用編碼 GBK = ‘gbk‘ UTF8 = ‘utf-8‘ # 解碼方式,一般 py 文件執行為utf-8 ,cmd 命令為 gbk current_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 執行命令,重定向實時輸出