1. 程式人生 > >python 通過 subprocess 執行命令,重定向實時輸出

python 通過 subprocess 執行命令,重定向實時輸出

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, rD:\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 執行命令,重定向實時輸出