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

Posted linaniu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, rD:code	est.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 执行命令,重定向实时输出的主要内容,如果未能解决你的问题,请参考以下文章

Python之系统交互(subprocess)

Python之系统交互(subprocess)

Python之系统shell交互(subprocess)

subprocess模块

subprocess模块详解

subprocess模块