python 在linux下调用Shell命令

python中执行shell命令的几个方法,本文一共给出3种方法实现执行shell命令。
其中包括ossubprocess以及commands三个模块下对shell命令的执行,三种方法都可以完成命令,但是subprocess模块是python官方推荐使用的方法,因为subprocess可以更好地支持子进程的使用。

一、os模块

1. os.system

  • system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果,在页面上打印的命令执行结果 0、1或者其他数字,这些数字代表了命令的正确或者错误原因。
  • system方法比较适用于外部程序没有输出结果的情况,因为执行的结果会直接打印出来,如果需要打印的结果可以使用os.popen方法。
  • system方法已经过时,现在官方推荐是使用subprocess模块中的方法,下面也会介绍。

python shell 命令:

>>> import os
>>> os.system (‘ls’)
bin boot dev etc home # 返回ls的结果
0 # 返回的结果0,代表命令正确

2. os.popen

  • popen方法返回的是一个 file 的对象,可以对其进行读取,通过read()或readlines() 的操作可以看到执行的输出。
  • popen方法无法读取程序执行的返回值。

python shell 命令:

>>> import os
>>> p = os.popen(‘ls’)
>>> content = p.read()
>>> print content
bin boot dev etc home # 打印ls的结果
>>> p.close()

二、subprocess模块

1. subprocess.call

  • subprocess模块的call函数。它基本上就像Popen类并都使用相同的参数,但是它只简单的等待命令完成并返回代码。

python shell 命令:

>>> import subprocess
>>> subprocess.call([“ls”, “-l”])
0 # 返回的结果0,代表命令正确

  • 使用了shell=True这个参数。这个时候,使用一整个字符串,而不是一个表来运行子进程。Python将先运行一个shell,再用这个shell来解释这整个字符串。

python shell 命令:

>>> import subprocess
>>> subprocess.call(“ls -l”, shell=True)
0 # 返回的结果0,代表命令正确

2. subprocess.popen

  • Popen对象创建后,主程序不会自动等待子进程完成。必须调用对象的wait()方法,父进程才会等待 (也就是阻塞block)。

python 代码:

import subprocess
child = subprocess.Popen("ping -c 5 www.baidu.com",shell=True)
# 此时会先打印出end, 并不会等待子进程完成
print 'end'
import subprocess
child = subprocess.Popen("ping -c 5 www.baidu.com",shell=True)
child.wait()
# 此时会等待子进程完成,再打印end
print 'end'
  • Popen方法如果需要对输出进行读取,可以使用communicate()方法。
import subprocess
pipe= subprocess.Popen("ls -l", shell=True, stdout=subprocess.PIPE)
# 使用communicate()来获取指令的输出
content = pipe.communicate()
print content

三、commands模块

1. commands.getoutput

  • 使用getoutput方法,这种方法同popen的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。

python shell 命令:

>>> import commands
>>> commands.getoutput(‘ls /bin/ls’)
‘/bin/ls’

2. commands.getstatusoutput

  • 使用getstatusoutput方法,返回的结果为(status, output)

python shell 命令:

>>> import commands
>>> commands.getstatusoutput(‘ls /bin/ls’)
(0, ‘/bin/ls’)

3. commands.getstatus

  • 使用getstatus方法,返回ls -ld file的执行结果字符串,调用了getoutput方法,不建议使用此方法

python shell 命令:

>>> import commands
>>> commands.getstatus(‘/bin/ls’)
‘-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls’

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值