subprocess.Popen()函数
语法格式:
subprocess.Popen(arg,stdin=None,stdout=None,stderr=None,shell=False)
1、主要来讲讲shell=True/False的区别
我们一般常用的格式:subprocess.Popen("cat test.txt", shell=True)
它相当于
subprocess.Popen(["/bin/sh", "-c", "cat test.txt"])
在unix下,当shell=False(默认)时,Popen使用os.execvp()来执行子程序。args一般要是一个【列表】。如果args是个字符串的
话,会被当做是可执行文件的路径,这样就不能传入任何参数了。
在unix下,当shell=True时,如果arg是个字符串,就使用shell来解释执行这个字符串。如果args是个列表,则第一项被视为命令,
其余的都视为是给shell本身的参数。也就是说,等效于:
subprocess.Popen(['/bin/sh', '-c', args[0], args[1], ...])
2、返回状态码问题
有两种方法:
第一个:
popen = subprocess.Popen('ls /usr/bin', stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True) print("out:",str(popen.stdout.read(),encoding='utf-8')) popen.poll() print(popen.returncode)
popen.poll()函数表示检查子进程是否已结束,设置并返回状态值,用默认的即可。returncode负责返回真正的结果,如果执行成功,返回值为0,否则为其他任意状态码都表示执行失败。
第二个:
returnstatuscode函数:
exitcode_curl,output_curl = subprocess.getstatusoutput(cmd_curl)
print("code1:%d output1:%s" %(exitcode_curl,output_curl),file=doc)
上面的两种方法都可以实现在Linux、windows平台执行命令,并且获取命令的状态返回值。