python执行shell脚本
Ⅰ python shell怎么使用
Python 中执行 Shell 命令有多种方法,stackoverflow 上有对这些方法进行比较的讨论,Calling an external command in Python 指出使用subprocess模块来实现更优。因此,本文说明如何使用subprocess模块来实现 Shell 脚本的功能。
subprocess模块提供多种方法来实现执行 Linux 的命令,例如subprocess.call()方法,subprocess.check_call()方法,等。这些方法都是对Popen类的封装,故本文着重讲述Popen类的使用。
执行 Shell 命令
可以通过向Popen()传递需要执行的命令来创建一个Popen对象,这样,便会创建一个子进程来执行命令。例如:
child = subprocess.Popen(["ping","-c","5","leehao.me"])
1
上面的代码会创建一个子进程来执行ping -c 5 leehao.me命令,这个命令采用列表的形式传递给Popen()方法。如果我们想直接采用ping -c 5 leehao.me字符串形式,可以添加shell=True来实现:
child = subprocess.Popen("ping -c 5 leehao.me", shell=True)
1
官方文档指出由于安全原因故不建议使用shell=True,详细说明可以参考官方文档的描述。
等待子进程执行
子进程执行命令后,主进程并不会等待子进程执行。为了让主进程等待子进程执行结束,需要显示调用Popen.wait()方法。例如:
child = subprocess.Popen(["ping","-c","5","leehao.me"])
child.wait()
print 'parent finish'
1
2
3
这样,主进程会等待子进程执行ping命令完毕后,才会打印出parent finish的输出。
获取执行结果
为了获取Popen()子进程的输出,可以使用Popen.communicate()方法,例如:
def subprocess_cmd(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
proc_stdout = process.communicate()[0].strip()
print proc_stdout
subprocess_cmd('echo leehao.me; echo www.leehao.me')
1
2
3
4
5
6
输出:
leehao.me
www.leehao.me
process.communicate()方法可以实现主进程与子进程的通信。主进程可以通过它向子进程发送数据,也可以读取子进程的输出的数据。上面的例子中,我们在创建Popen对象时指定stdout=subprocess.PIPE,这样主进程便可以读取子进程的输出。
communicate()方法返回一个元组:(stdoutdata, stderrdata),process.communicate()[0]即获取子进程的标准输出。
需要指出的是,调用communicate()方法后,主进程也会等待子进程执行完毕。
上面的例子中,子进程向标准输出打印两个字符串,主进程接收到了这些输出,并打印出来。
Ⅱ python执行shell命令
Python执行Linux系统命令,即在Python脚本中调用Shell命令,具体有以下四种方法:
1、os.system
//仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息
system(command)->exit_status
Executethecommand(astring)inasubshell.
//如果再命令行下执行,结果直接打印出来:
>>>os.system('ls')
04101419778.CHMbashdocumentmediapy-djangovideo
11.
all-
2、os.popen
//该方法不但执行命令还返回执行后的信息对象
popen(command[,mode='r'[,bufsize]])->pipe
Openapipeto/.
3、使用模块 subprocess
>>>importsubprocess
>>>subprocess.call(["cmd","arg1","arg2"],shell=True)
//获取返回和输出:
importsubprocess
p=subprocess.Popen('ls',shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
forlineinp.stdout.readlines():
printline,
retval=p.wait()
4、使用模块 commands
>>>importcommands
>>>dir(commands)
['__all__','__builtins__','__doc__','__file__','__name__','getoutput','getstatus','getstatusoutput','mk2arg','mkarg']
>>>commands.getoutput("date")
'WedJun1019:39:57CST2009'
>>>
>>>commands.getstatusoutput("date")
(0,'WedJun1019:40:41CST2009')
Ⅲ python怎么调用shell脚本
直接使用python 后面跟python脚本的文件名就可以
例如:python tr.py就是在shell中执行pr.py这个python脚本,见下图:
Ⅳ 我希望通过Python脚本实现多次执行shell命令
python脚本实现多次循环执行shell命令有三种方法,代码如下:
#方法一
os.system
importos
i=0
whileTrue:
i=i+1
os.system("tcpreplay-ibond0-M5-l1oracle_request_response.cap")
print"+++++++++++++++++++++++++++++++"
print"times:",i
time.sleep(5)
#方法二
os.popen
importos
i=0
whileTrue:
i=i+1
printos.popen("tcpreplay-ibond0-M5-l1oracle_request_response.cap").read()
print"+++++++++++++++++++++++++++++++"
print"times:",i
time.sleep(60)
#方法三
output=Popen("xxx",shell=True).communicate()[0]
importos
fromsubprocessimport*
i=0
whileTrue:
i=i+1
output=Popen("tcpreplay-ibond0-M5-l1oracle/*",shell=True).communicate()[0]
print"+++++++++++++++++++++++++++++++"
print"times:",i
time.sleep(60)
Ⅳ 如何使用python执行远程shell脚本
可以使用Python的Fabric包来完成这项任务。
既然是谈到Shell脚本,系统应该是Linux/Unix的,远程访问,应该是ssh吧。
Fabric功能是将一个任务通过ssh在多台服务器上执行,而每个任务可以是单条shell指令或是一段python脚本。
Fabric是将Python, Shell和SSH的功能很优雅地结合在了一起,同时自身又非常的轻量,适合大部分服务器群的日常管理工作。
Ⅵ 如何用Python交互执行shell脚本
“交互执行shell脚本”是不是说代替人的手动输入,比如sudo时输入密码的操作?
这种情况可以用Pexpect模块。不是默认的,需要自己装。
Ⅶ python中怎么运行shell脚本
python中怎么运行shell脚本?
system()
其中最后一个0是这个命令的返回值,为0表示命令执行成功。使用system无法将执行的结果保存起来。
popen()
获取命令执行的结果,但是没有命令的执行状态,这样可以将获取的结果保存起来放到pst中。
commands
可以很方便的取得命令的输出(包括标准和错误输出)和执行状态位。
commands.getoutput('ls')这个方法只返回执行结果result不返回状态。
在python中调用shell脚本
hello.sh
下面的512是返回的状态码,如果eixt 0时则返回的是0.
shell脚本使用python脚本的参数
写一个hello.sh脚本,需要传入两个参数:
执行结果如下:
在python脚本中调用shell脚本,并传入参数,注意参数前后要有空格
执行python脚本
相关推荐:《Python教程》以上就是小编分享的关于python中怎么运行shell脚本的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
Ⅷ 如何执行python脚本 如何执行shell命令行
提问者说的是dos命令下的打开方式:方法是Python 文件全路径名:当然也可以右键,选择Edit With IDLE,然后直接按F5运行;或者双击。
Ⅸ python/shell脚本
shell应该属于宏语言,顾名思义是系统的壳,方便与系统交互的在以下情况下,不使用shell,因为shell对此无能为力;如:跨平台,较复杂数学操作(如浮点运算,精确运算等),图形化界面 GUI,I/O 或socket 接口,多维数组,对效率要求很高等。 sh...
Ⅹ 怎么在python脚本中实现shell命令
最近有个需求就是页面上执行shell命令,第一想到的就是os.system,
复制代码 代码如下:
os.system('cat /proc/cpuinfo')
但是发现页面上打印的命令执行结果 0或者1,当然不满足需求了。
尝试第二种方案 os.popen()
复制代码 代码如下:
output = os.popen('cat /proc/cpuinfo')
print output.read()
通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。但是无法读取程序执行的返回值)
尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。
复制代码 代码如下:
(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output
Python Document 中给的一个例子,
复制代码 代码如下:
>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'
最后页面上还可以根据返回值来显示命令执行结果。