python 通过 subprocess 执行命令,重定向实时输出

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

猜你喜欢

转载自www.cnblogs.com/linaniu/p/9393619.html