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‘, r‘D: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 执行命令,重定向实时输出的主要内容,如果未能解决你的问题,请参考以下文章