python通过subprocess.Popen执行命令,重定向输出结果(cmd命令)
执行 ping 命令import subprocessimport sys# 常用编码GBK = 'gbk'UTF8 = 'utf-8'# 解码方式,一般 py 文件执行为utf-8 ,cmd 命令为 gbkcurrent_encoding = GBKpopen = subprocess.Popen(['ping', 'www.baidu.com'],...
·
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()
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献53条内容
所有评论(0)