subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

执行args的command,返回执行结果,即返回码,即使返回码不为0,也正常返回结果,不会抛异常

>>> a=subprocess.call("ls -l",shell=True)     
total 36
-rw-r--r-- 1 root root  194 Aug  1 10:34 bind.ini
-rw-r--r-- 1 root root  704 Aug  1 15:13 db.ini
-rw-r--r-- 1 root root  169 Aug  1 11:43 dnsfast.ini
-rw-r--r-- 1 root root  404 Aug  1 11:08 dnssec.ini
-rw-r--r-- 1 root root 1506 Aug  2 10:27 global.ini
-rw-r--r-- 1 root root 1538 Aug  1 15:23 ini.tar.gz
-rw-r--r-- 1 root root   96 Aug  2 10:06 mail.ini
-rw-r--r-- 1 root root   45 Jul 25 17:00 sos2.ini
drwxr-xr-x 2 root root 4096 Aug  1 15:25 zone_conf
>>> a
0
>>> b=subprocess.call("exit 1",shell=True)
>>> b
1

subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

执行args的command,待执行完结后,如果返回码为0,结束。如果返回码不为0,抛出异常

>>> a=subprocess.check_call("ls -l",shell=True)
total 36
-rw-r--r-- 1 root root  194 Aug  1 10:34 bind.ini
-rw-r--r-- 1 root root  704 Aug  1 15:13 db.ini
-rw-r--r-- 1 root root  169 Aug  1 11:43 dnsfast.ini
-rw-r--r-- 1 root root  404 Aug  1 11:08 dnssec.ini
-rw-r--r-- 1 root root 1506 Aug  2 10:27 global.ini
-rw-r--r-- 1 root root 1538 Aug  1 15:23 ini.tar.gz
-rw-r--r-- 1 root root   96 Aug  2 10:06 mail.ini
-rw-r--r-- 1 root root   45 Jul 25 17:00 sos2.ini
drwxr-xr-x 2 root root 4096 Aug  1 15:25 zone_conf
>>> a
0
>>> b=subprocess.check_call("exit 1",shell=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/subprocess.py", line 511, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1
>>> b
1

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)

执行command命令,并返回字符串,返回码不为0,抛出异常

>>> subprocess.check_output("echo abc",shell=True)
'abc\n'

>>> subprocess.check_output("exit 1",shell=True) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/subprocess.py", line 544, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

获取进程ID

pid= subprocess.check_output('pidof -o %PPID -x named', shell=True)

pid=pid.strip()

杀死进程

stop_cmd = 'kill -KILL %s' % pid
subprocess.check_call(stop_cmd, shell=True)

 

    def _getpid(self):
        pid = None
        try:
            output = subprocess.check_output('pidof -o %PPID -x named', shell=True)
            pid = output.strip()
        except Exception, e:
            pass
        return pid