обработка непрерывного вывода команды в python

Я совсем новичок в python, использовал perl в течение многих лет. Типичная вещь, которую я постоянно делаю в perl, - это открываю команду как pipe и присваиваю ее вывод локальной переменной для обработки. Другими словами:

"open CMD, "$command|";
$output=<CMD>;

это проще простого. Я думаю, что смогу сделать нечто подобное в python таким образом:

args=[command, args...]
process=subprocess.Popen(args, stdout=subprocess.PIPE)
output=process.communicate()

пока все хорошо. Теперь к главному вопросу...

Если я выполню эту команду с помощью ssh на нескольких платформах, я смогу затем отслеживать дескрипторы в perl внутри цикла select для обработки результатов по мере их поступления. Я нашел модули python select и poll, но не совсем уверен, как их использовать. В документации сказано, что poll будет принимать хэндл файла, но когда я пытаюсь передать переменную 'process' выше в poll.register(), я получаю ошибку, что она должна быть int или иметь метод fileno(). Поскольку Popen() использует stdout, я попробовал вызвать

poll.register(process.stdout)

и он больше не выдает ошибку, но вместо этого просто зависает.

Любые предложения/указатели, как заставить что-то подобное работать?

5
задан casperOne 27 April 2012 в 20:45
поделиться