Получение вывода оболочки с Python? - PullRequest
3 голосов
/ 13 января 2011

У меня есть скрипт оболочки, который получает информацию whois для доменов и выводит taken или available в оболочку в зависимости от домена.

Я хотел бы выполнить скрипт и уметьчтобы прочитать это значение в моем скрипте Python.

Я играл с subprocess.call, но не могу понять, как получить вывод.

например,

subprocess.call('myscript www.google.com', shell=True)

выведет taken в оболочку.

Ответы [ 4 ]

8 голосов
/ 13 января 2011

subprocess.call() не выдает вывод, только код возврата.Для вывода вы должны использовать subprocess.check_output() вместо.Это дружественные оболочки для семейства функций popen, которые вы также можете использовать напрямую.

Подробнее см. http://docs.python.org/library/subprocess.html

6 голосов
/ 14 января 2011

Ручное использование stdin и stdout с Popen было настолько распространенным шаблоном, что его абстрагировали в очень полезный метод в модуле подпроцесса: коммуникации

Пример:

p = subprocess.Popen(['myscript', 'www.google.com'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
(stdoutdata, stderrdata) = p.communicate(input="myinputstring")
# all done!
5 голосов
/ 13 января 2011
import subprocess as sp
p = sp.Popen(["/usr/bin/svn", "update"], stdin=sp.PIPE, stdout=sp.PIPE, close_fds=True)
(stdout, stdin) = (p.stdout, p.stdin)
data = stdout.readline()
while data:
    # Do stuff with data, linewise.

    data = stdout.readline()
stdout.close()
stdin.close()

Использую идиому, очевидно, в этом случае я обновлял svn-репозиторий.

1 голос
/ 13 января 2011

попробуй subprocess.check_output.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...