Python调用Shell命令的三种常用方法解析
本文详细介绍Python中执行Shell命令的三种主要方式:os.system、os.popen以及commands.getstatusoutput。对比分析了各方法的返回值特性、优缺点及适用场景,帮助开发者根据是否需要获取输出内容或仅关注执行状态,选择最合适的调用方案。
1. os.system(shell_command)
该方法直接在终端输出执行结果,并返回表示执行状态的整数(0或1)。
此函数会启动一个子进程来执行指定的command,并返回该命令执行完毕后的退出状态码。如果command有具体的执行内容,这些内容会显示在标准输出中。其底层实现实际上是调用了C语言标准库中的system()函数。
该方法的缺点在于,执行command命令时需要重新打开一个终端环境,并且无法直接保存或获取command命令的具体执行结果(输出内容)。
os.system('cat /etc/passwdqc.conf')
2. os.popen()
该函数用于打开一个与command进程之间的通信管道。其返回值是一个文件对象,支持读取或写入操作(由mode参数决定,默认值为'r')。当mode设置为'r'时,可以通过调用该文件对象的read()方法来获取command命令的执行结果。
在实际使用中,os.system(cmd)返回的是脚本的退出状态码,而os.popen(cmd)返回的是脚本执行过程中的具体输出内容。开发者应根据实际需求(是关注状态还是内容)来选择合适的函数。
tmp = os.popen('ls -l *').readlines()
3. commands.getstatusoutput(command)
使用commands.getstatusoutput(command)函数执行command命令,并返回一个包含两个元素的元组(status, output),分别表示command命令执行的返回状态和执行结果。对command的实际执行方式等同于在shell中执行{command;} 2>&1,因此output变量中既包含控制台的标准输出信息,也包含错误信息。需要注意的是,output字符串不包含尾部的换行符。
(status, output) = commands.getstatusoutput("netstat -apn|grep {0} | awk '{{{1}}}' |xargs echo ".format(port, 'print $7'))
rr = re.compile(r'(\d+)/java')
op = rr.findall(output) #查找所有包含'java'的单词
for i in range(len(op)):
os.system("kill -9 {0}".format(op[i]))
#按照标志杀进程
os.system("ps -ef | grep {0} | awk '{{{1}}}' | xargs kill -9".format(key, 'print $2'))
在实际使用时,感觉 commands.getstatusoutput(command) 用起来比较方便,开发者可根据实际要实现的功能选择合适的方案。
总结
以上就是本文关于Python执行使用Shell命令方法分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:python通过socket实现多个连接并实现ssh功能详解、Python基础练习之用户登录实现代码分享、Python入门之三角函数全解【收藏】等。有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









