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 ',结果为bytes类型
要读出来要先输出到标准输出里,先存到管道PIPE,再给stdout;由于python和shell是两个进程不能直接通信,必须通过操作系统提供的管道,用管道可以把结果存到stdin stdout stderr
参考:https://www.cnblogs.com/revo/p/7357170.html
控制台乱码:https://blog.csdn.net/pfm685757/article/details/53330531