python通过subprocess.Popen执行命令,重定向输出结果(cmd命令)

1、python执行cmd命令并输出结果

我们在cmd命令行窗口中执行命令,如:ping www.baidu.com,可以得到ping的结果,如下:
在这里插入图片描述
我们想通过python来执行cmd,如果想把cmd执行的结果在python中输出,可以使用subprocess.Popen
代码示例:

import subprocess
import sys

# 常用编码
GBK = 'gbk'
UTF8 = 'utf-8'

# 解码方式,一般 py 文件执行为utf-8 ,cmd 命令为 gbk
current_encoding = GBK
# 构造popen
popen = subprocess.Popen('ping www.baidu.com', shell = True,
                         stdout = subprocess.PIPE,
                         stderr = subprocess.PIPE,
                         universal_newlines=True,
                         bufsize = 1)       
# 执行                                           
out,err = popen.communicate()
print('std_out: ' + out)
print('std_err: ' + err)
print('returncode: ' + str(popen.returncode))

运行结果:

std_out: 
正在 Ping www.a.shifen.com [14.215.177.39] 具有 32 字节的数据:
来自 14.215.177.39 的回复: 字节=32 时间=5ms TTL=47
来自 14.215.177.39 的回复: 字节=32 时间=5ms TTL=47
来自 14.215.177.39 的回复: 字节=32 时间=5ms TTL=47
来自 14.215.177.39 的回复: 字节=32 时间=5ms TTL=47

14.215.177.39 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 5ms,最长 = 5ms,平均 = 5ms

std_err: 
returncode: 0

2、执行 .py文件,并输出结果

假设有一个test.py,所在路径:D:\python_proj\test.py
test.py代码如下:

import os

if __name__ == '__main__':
    print('hello, I am test.py')

现在,我们想执行这个py脚本并输出结果。
代码示例:

import subprocess
import sys

# 常用编码
GBK = 'gbk'
UTF8 = 'utf-8'

current_encoding = UTF8
# 构造popen 
popen = subprocess.Popen('python D:\python_proj\test.py',
                         stdout = subprocess.PIPE,
                         stderr = subprocess.PIPE,
                         universal_newlines=True,
                         bufsize = 1)
# 执行                         
out,err = popen.communicate()
print('std_out: ' + out)
print('std_err: ' + err)
print('returncode: ' + str(popen.returncode))

运行效果:

std_out: hello, I am test.py

std_err: 
returncode: 0

3、实时输出结果

上面都是命令执行完毕后才输出结果的,我们如果想要执行过程中实时输出结果,则需要通过stdout.readline来读取。
例1:

import subprocess
# 构造popen
p = subprocess.Popen('ping www.baidu.com', shell = True,
                         stdout = subprocess.PIPE,
                         stderr = subprocess.PIPE)       
# 执行                                           
for line in iter(p.stdout.readline, b''):
    print(line.decode('gbk'))
p.stdout.close()

例2:

import subprocess
# 构造popen
p = subprocess.Popen('python test2.py', shell = True,
                         stdout = subprocess.PIPE,
                         stderr = subprocess.PIPE)       
# 执行                                           
for line in iter(p.stdout.readline, b''):
    print(line.decode('utf-8'))
p.stdout.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林新发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值