Содержание

subprocess модуль Python

Модуль subprocess обеспечивает унифицированный интерфейса доступа к операционной системе. Модуль subprocess отвечает в языке Синтаксис Python за выполнение следующих действий: порождение новых процессов, соединение c потоками стандартного ввода, стандартного вывода, стандартного вывода сообщений об ошибках и получение кодов возврата от этих процессов.

Для запуска команд системы используется две функции subprocess.call() и subprocess.Popen(). Основное отличие этих функций между собой: функция subprocess.call() блокирует выполнение сценария до получения ответа, в то время как функция subprocess.Popen() - нет.

subprocess.call

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess

def test1call():
    retcode=subprocess.call("du -hs $HOME/.viminfo", shell=True)
    if retcode == 0:
        print ("success")
    else:
        print ("failure")
  
def main():
    test1call()

if __name__ == '__main__':
    main()

subprocess.Popen

class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

Аргументы:

#!/usr/bin/env python
import subprocess

def ping1(ipaddress="192.168.1.14"):
    p = subprocess.Popen("/bin/ping -c 2 %s" % ipaddress, shell=True,
                        stdout=subprocess.PIPE)
    out = p.stdout.read() #в переменной out находится вывод команды ping. Ниже идет обработка вывода команды ping.
    print out
    result = out.split()
    print result

if __name__ == '__main__':
    ping1()
output='dmesg | grep hda'

import subprocess
p1 = subprocess.Popen(["dmesg"], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["grep", "hda"], stdin=p1.stdout, stdout=subprocess.PIPE)