Непосредственно подключите вывод системных вызовов к логгеру в Python - PullRequest
0 голосов
/ 30 марта 2012

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

call( '<a-shell-cmd>', shell=True, stdout=myFile )

но я бы предпочел не связывать себя открытием временного файла, циклическим циклом по файлу, записью вывода, закрытием файла, удалением файла и т. Д. Если в любом случае я могу отправить вывод непосредственно в регистратор, он казалось бы, намного аккуратнее для меня. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Используйте модуль подпроцесса .

Совет: вы можете перейти к документации для конкретной версии python через http://docs.python.org/release/<major>.<minor>/

Начиная с Python 2.7 и выше:

output = subprocess.check_output(["command", "arg1"], shell=True)

В Python 2.4:

process = subprocess.Popen(["command", "arg1"], shell=True, stdout=subprocess.PIPE)
stdout,stderr = process.communicate()
# not shown: how to use Popen.poll() to wait for process death.
# while filling an output buffer
print stdout

Ниже Python 2.4:

output = os.popen('ls')
1 голос
/ 30 марта 2012

Использовать os.popen

output = os.popen('ls')

Вы можете записать вывод или сделать это напрямую при вызове выше.

...