HPC.ru lite - Все форумы
Форум: КПК и смартфоны на Linux: Zaurus, планшеты Nokia, прочее
Тема: Вопросики по Питону под Завром.
Страницы: [1] 2
[Ответить]
Serge_RUS [16.08.2006 16:10] Вопросики по Питону под Завром.:
1. Хочу написать пару фронт-ендов к консольным прогам. (напр obexpush
). Интересует, каким образом можно вызвать консольную прогу из-под питона и получить доступ к тому, что она пишит в консоли? Я нюб, типа 
Пока один вопрос... 
DMych [16.08.2006 17:15] :
Как обычно, используя функции popen, popen2, popen3 или popen4 из модуля os:
>>> import os
>>> fout = os.popen('ls *.txt')
>>> fout.readlines()
RTFM: http://docs.python.org/lib/os-newstreams.html#os-newstreams 
Serge_RUS [16.08.2006 22:22] :
Thanx! Если ещё вопросы будут, то буду писать сюда. 
Serge_RUS [28.08.2006 16:21] :
Хм.. Пишу фронт-енд к wget. Что-то не получается. Когда я делаю fout = os.popen('wget somefile'), то он сразу начинает показыветь результат, тем самым, когда я вызываю fout.readlines(), то ответ: ['']. Но с командой hcitool scan проходит. Странно. Что делать?
Strijar [28.08.2006 16:41] :
Serge_RUS писал(а):
Когда я делаю fout = os.popen('wget somefile'), то он сразу начинает показыветь результат
Скорей всего они пишет не в stdout а в stderr - надо или перенапрявлять вывод (wget file 2>&1) или открывать stderr (файловый дескриптор 2, а не 1)
DMych [28.08.2006 17:11] :
скорее всего он пишет в stderr. попробуй popen3 (кажется так)
это более правильно, чем использовать перенаправление в строке команды, ИМХО.
Strijar [31.08.2006 12:57] :
DMych писал(а):
это более правильно, чем использовать перенаправление в строке команды, ИМХО.
А вот не факт - он может писать И в stdout И в stderr 
Serge_RUS [31.08.2006 13:41] :
В любом случае есть проблемы... Например: пока выполняется f.read() программа зависает и не отображает статус загрузки wget'а. Хотя должна выводит в кутопийное текстовое поле.
DMych [31.08.2006 15:29] :
Strijar писал(а):
А вот не факт - он может писать И в stdout И в stderr 
И что? Читаем документацию:
popen3( cmd[, mode[, bufsize]])
Executes cmd as a sub-process. Returns the file objects (child_stdin, child_stdout, child_stderr). Availability: Macintosh, Unix, Windows. New in version 2.0.
Т.о., (fin, fout, ferr) = os.popen3('...') - имеем три файловых объекта, через один из которых можем передавать данные в подпроцесс, и два - из которых читам соотв. stdout и sdterr подпроцесса.
Serge_RUS писал(а):
В любом случае есть проблемы... Например: пока выполняется f.read() программа зависает и не отображает статус загрузки wget'а. Хотя должна выводит в кутопийное текстовое поле.
А что мешает использовать f.readlines() в цикле? Или ограничивать каждый read некоторым количеством байт, например, f.read(1024)? Первый вариант лучше подходит для текстовых данных.
Serge_RUS [31.08.2006 17:23] :
Хм... А как тогда реализовать дозапихивание инфы в мультилайновое текстовое поле
?
[Ответить]
[Вперед >]