搬马

导航

 

subprocess.call()  #执行命令,并返回执行状态,其中shell为False时,命令需要通过列表的形式传入,如果shell为True时,可直接传入命令。

shell为Ture时不需要python解析,直接传给shell,所以后面可以直接加命令;shell为False时,表时需要python解析,所以可以加列表或元组,如果不是这两种类型,则报错。

import subprocess

a = subprocess.call('cd',shell=True)
print(a)    #打印结果为0,说明前一个命令的返回值为0,成功则返回0,不成功则返回非0

 

subprocess.Popen()

在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。这个时候我们就需要使用到suprocess的Popen()方法。

import subprocess
obj = subprocess.Popen('cd',shell=True,stdout=subprocess.PIPE)   #将shell的执行结果输出到管道
print(obj)    #<subprocess.Popen object at 0x0000000000FB4A20>
a = obj.stdout.read()   #获取这个对象输出到管道中的内容
print(a)    #b'C:\\Users\\Lowry\\PycharmProjects\\fullstack_s2\\week7\\day1\r\n',结果为bytes类型

 

要读出来要先输出到标准输出里,先存到管道PIPE,再给stdout;由于python和shell是两个进程不能直接通信,必须通过操作系统提供的管道,用管道可以把结果存到stdin stdout stderr

 

 

参考:https://www.cnblogs.com/revo/p/7357170.html

 

控制台乱码:https://blog.csdn.net/pfm685757/article/details/53330531

posted on 2018-03-16 11:29  搬马  阅读(125)  评论(0编辑  收藏  举报