subprocess: python 2.7脚本中如何运行shell命令

每次用的时候都要去读一下文档,这次总结一下,记录于此,已备后用。 其实这个主要是用subprocess这个模块。 最普通的,执行命令,但不管命令的输出:

设置”shell=True” 是告诉python在后台生成一个shell进程,然后在此shell进程中执行相应命令。 这样可以利用到shell中的一些特性,但这样做有安全风险,只有传入的命令完全可控时才这样做。   命令的返回值保存在return_code中。输出则直接输出到屏幕(stdout)。 如果需要获取命令的输出,则用subprocess中的check_output, 而非call:

上面的方式中,如果命令的出错输出(如果有的话)仍然会出现在屏幕上。 如果想要将出错输出一并捕捉,则在设置stderr参数为STDOUT:

如果需要传入一些数据给要执行的命令,则使用Popen函数,且设置stdin参数为subprocess.PIPE, 然后再调用 communicate()函数,将要传入的数据作为参数传入:

如果既需要传入数据,又需要获取输出,则同时设置stdin和stdout:

如果还要错误输出:

模仿shell命令的管道用法: cat index.rst | grep ‘.. include::’ | cut -f 3 -d: (每次看到为了运行一个命令都要这么麻烦我就头痛 :-()

参考文档: https://docs.python.org/2/library/subprocess.html https://pymotw.com/2/subprocess/

Read More