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

您所在的位置:网站首页 python重定向输出到文件 python通过subprocess.Popen执行命令,重定向输出结果(cmd命令)

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

2023-08-01 13:31| 来源: 网络整理| 查看: 265

文章目录 1、python执行cmd命令并输出结果2、执行 .py文件,并输出结果3、实时输出结果

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()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3