zoukankan      html  css  js  c++  java
  • subprocess模块的使用注意

    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平台执行命令,并且获取命令的状态返回值。 

  • 相关阅读:
    汉字数组排序及如何检测汉字
    响应式web布局中iframe的自适应
    CSS3的flex布局
    关于BFC不会被浮动元素遮盖的一些解释
    趣谈unicode,ansi,utf-8,unicode big endian这些编码有什么区别(转载)
    深入seajs源码系列三
    深入seajs源码系列二
    深入seajs源码系列一
    韩国"被申遗" (转自果壳)
    Understanding delete
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/11095833.html
Copyright © 2011-2022 走看看