首页 > 编程语言 > 详细

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

时间:2018-07-31 00:57:58      阅读:198      评论:0      收藏:0      [点我收藏+]

环境: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 执行命令,重定向实时输出

原文:https://www.cnblogs.com/linaniu/p/9393619.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!