在日常使用中,我们常常需要对一些固定命令进行相关操作。在网络通信中,常常需要我们通过自己的计算机远程获取服务器的相关参数,以最大程度地提高工作效率,在此涉及到两个简单地问题,一个是网络通信,另一个则是执行命令操作的使用。
常规地,我们使用os模块中的popen()函数进行打开操作,但是运用此模块时,常出现以下 问题,如果输入的操作不是命令则会报错,出现以下问题。这些输出信息则是没办法进行解码和编码的,并且也是无法进行显示的。
import os
r=os.popen('1111')
print(r.read())
'1111' �����ڲ����ⲿ���Ҳ���ǿ����еij���
���������ļ���
为解决此问题,我们在此引入一个新的模块,subprocess模块,其调用方法与os模块类似,打开函数也是基本一致的为Popen()函数,这里是一首字母P大写的Popen。该函数的具体调用形式如下:
subprocess.Popen('命令', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
该函数具有两个返回值,当输入为一个命令时,则返回stdout,当不是命令时,则返回stderr,具体函数如下所示。
import subprocess
msg_r='1111'
msg_rr = subprocess.Popen(msg_r, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
std_out = msg_rr.stdout.read()
std_err = msg_rr.stderr.read()
if not std_err:
print(std_out.decode('gbk'))
else:
print(std_err.decode('gbk'))
输出结果为:
'1111' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
通过引入新函数,就算输入不是命令是会返回一个较为的有效可读的结果。在此需要注意的是,windows的默认编码均为gbk编码格式,所以最后的解码格式都是以gbk的形式进行解码。
小伙伴们快去试试吧~~~~~~~