码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-07-31 01:29:08      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:www   port   div   lin   错误   sys   encoding   out   cmd   

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

标签:www   port   div   lin   错误   sys   encoding   out   cmd   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!