import subprocess
"""
拓展: linux命令
echo 123; ls / ; ls /root --> 分号";"在里的在这里的意义是无论你前面运行的结果是否是正确,都会向后运行。
"""
obj = subprocess.Popen(
'ipconfig', # 这里指定的是终端命令。
shell=True, # 这里可以理解为相当于直接打开了命令终端, 执行上面的字符串中执行的命令。
stderr=subprocess.PIPE, # 这里会把执行终端命令的结果。放到这个管道中。如果是错误的结果, 会赋值给stderr. 如果是正确的结果会赋值给stdout. 如过没有错误的结果, stderr接收到的是个空bytes类型: b''. 如过没有正确的结果, stdout接收到的也是个空bytes类型: b''
stdout=subprocess.PIPE,
)
print(obj) # <subprocess.Popen object at 0x000002CB6FCBC970>
# 通过拿到的obj对象, 拿到这个对象下面的方法stdout或stderr, 进行read(), 读取执行终端命令返回的结果, 返回的结果是一个bytes类型
# 返回bytes类型的好处在于不会乱码, 可以自己指定字符编码解码出内容显示到屏幕上. 而之前我们所学的os.system()则是直接把指定执行的终端命令直接拿到返回值, 所以会引发乱码问题)_
res = obj.stderr.read()
print(res) # b''
print(obj.stdout.read().decode("gbk")) # 我当前的操作平台是在windows操作平台上。而执行windows操作平台上的终端命令,我要使用gbk方式来解码。