shell调⽤python命令_讲讲如何让shell执⾏python命令的两种
实⽤⽅法
如何⽤python写shell脚本执⾏linux命令?看下⾯的教程!
第⼀种、使⽤python内置commands模块执⾏shell
commands对Python的os.popen()进⾏了封装,使⽤SHELL命令字符串作为其参数,返回命令的结果数据以及命令执⾏的状态;
该命令⽬前已经废弃,被subprocess所替代;
# coding=utf-8
'''
Created on 2013年11⽉22⽇
@author: crazyant
'''
import commands
import pprint
def cmd_exe(cmd_String):
print "will exe cmd,cmd:"+cmd_String
statusoutput(cmd_String)
if __name__=="__main__":
pprint.pprint(cmd_exe("ls -la"))
第⼆种、使⽤python最新的subprocess模块执⾏shell
Python⽬前已经废弃了os.system,os.spawn*,os.popen*,popen2.*,commands.*来执⾏其他语⾔的命令,subprocesss是被推荐的⽅法;
subprocess允许你能创建很多⼦进程,创建的时候能指定⼦进程和⼦进程的输⼊、输出、错误输出管道,执⾏后能获取输出结果和执⾏状态。
# coding=utf-8
'''
Created on 2013年11⽉22⽇
@author: crazyant
'''
import shlex
import datetime
import subprocess
import time
def execute_command(cmdstring, cwd=None, timeout=None, shell=False):
"""执⾏⼀个SHELL命令
封装了subprocess的Popen⽅法, ⽀持超时判断,⽀持读取stdout和stderr
参数:
cwd: 运⾏命令时更改路径,如果被设定,⼦进程会直接先更改当前路径到cwd
timeout: 超时时间,秒,⽀持⼩数,精度0.1秒
shell: 是否通过shell运⾏
Returns: return_code
Raises: Exception: 执⾏超时
"""shell脚本返回执行结果
if shell:
cmdstring_list = cmdstring
else:
cmdstring_list = shlex.split(cmdstring)
if timeout:
end_time = w() + datetime.timedelta(seconds=timeout)
#没有指定标准输出和错误输出的管道,因此会打印到屏幕上;
sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE,shell=shell,bufsize=4096)
#subprocess.poll()⽅法:检查⼦进程是否结束了,如果结束了,设定并返回码,放在urncode变量中
while sub.poll() is None:
time.sleep(0.1)
if timeout:
if end_time <= w():
raise Exception("Timeout:%s"%cmdstring)
return urncode)
if __name__=="__main__":
print execute_command("ls")
也可以在Popen中指定stdin和stdout为⼀个变量,这样就能直接接收该输出变量值。
本⽂说明
在python中执⾏SHELL有时候也是很必须的,⽐如使⽤Python的线程机制启动不同的shell进程,⽬前subprocess是Python官⽅推荐的⽅法,其⽀持的功能也是最多的,推荐⼤家使⽤。
希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,如果有疑问⼤家可以留⾔⼀起交流。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。