環境: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() is 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() is 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) # 可修改輸出方式,比如控制台、文件等