sunsir 发表于 2018-8-11 11:45:55

python 使用subprocess模块来执行shell命令

  以下程序均来自《Python.UNIX和Linux系统管理指南》
  下面是用subprocess模块来实现shell命令的一个例子
subtube.py  
#!/usr/bin/env python
  
from subprocess import call
  
import time
  
import sys
  
class BaseArgs(object):
  
def __init__(self, *args, **kwargs):
  
self.args = args
  
self.kwargs = kwargs
  
if self.kwargs.has_key("delay"):
  
self.delay = self.kwargs["delay"]
  
else:
  
self.delay = 0
  
if self.kwargs.has_key("verbose"):
  
self.verbose = self.kwargs["verbose"]
  
else:
  
self.verbose = False
  
def run(self):
  
raise NotImplementedError
  
class Runner(BaseArgs):
  
def run(self):
  
for cmd in self.args:
  
if self.verbose:
  
print "Running %s with delay=%s" % (cmd, self.delay)
  
time.sleep(self.delay)
  
call(cmd, shell=True)
  运行结果
  # python
  Python 2.7.5 (default, Jun 19 2013, 07:19:44)
   on linux2
  Type "help", "copyright", "credits" or "license" for more information.
  >>> from subtube import Runner
  >>> r = Runner("df -h", "du -sh /tmp")
  >>> r.run()
  Filesystem            SizeUsed Avail Use% Mounted on
  /dev/mapper/VolGroup00-LogVol00
  18G5.3G   12G33% /
  /dev/sda1            99M   13M   82M13% /boot
  tmpfs               506M   0506M   0% /dev/shm
  /dev/hdc            3.7G3.7G   0 100% /mnt
  336K/tmp
  >>> r = Runner("df -h", "du -h /tmp", verbose=True)
  >>> r.run()
  Running df -h with delay=0
  Filesystem            SizeUsed Avail Use% Mounted on
  /dev/mapper/VolGroup00-LogVol00
  18G5.3G   12G33% /
  /dev/sda1            99M   13M   82M13% /boot
  tmpfs               506M   0506M   0% /dev/shm
  /dev/hdc            3.7G3.7G   0 100% /mnt
  Running du -h /tmp with delay=0
  4.0K/tmp/.ICE-unix
  12K/tmp/b/a
  16K/tmp/b
  4.0K/tmp/.font-unix
  12K/tmp/a
  336K/tmp
  下面是subprocess实现管道功能,将多个命令连接起来
  shell:
  # cat /etc/passwd | grep 0:0 | cut -d ':' -f 7
  /bin/bash
  python:
  >>> p1 = subprocess.Popen("cat /etc/passwd", shell=True, stdout=subprocess.PIPE)
  >>> p2 = subprocess.Popen("grep 0:0", shell=True, stdin=p1.stdout,stdout=subprocess.PIPE)
  >>> p3 = subprocess.Popen("cut -d ':' -f 7", shell=True, stdin=p2.stdout, stdout=subprocess.PIPE)
  >>> print p3.stdout.read()
  /bin/bash
页: [1]
查看完整版本: python 使用subprocess模块来执行shell命令