07-14 subprocess

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方式来解码。
posted @ 2020-04-01 01:02  给你加马桶唱疏通  阅读(157)  评论(0编辑  收藏  举报