Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 7, 2010 16:55:42

bum-bayan
От:
Зарегистрирован: 2010-09-03
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

path = sys.path[0]             
logpath = path + '/activate.log'
logfile = open(logpath, 'w')
pipe = subprocess.Popen('./test0.py', stdout = subprocess.PIPE, stderr = subprocess.PIPE)
Создаю файл, запускаю новый процесс, в котором выполняется скрипт test0.py. Как перенаправить вывод этого запущенного скрипта в файл?



Офлайн

#2 Сен. 8, 2010 05:34:54

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

где то ты что то не дочитал:
subprocess.Popen('./test0.py', stdout = logfile, stderr = logfile)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Сен. 8, 2010 12:52:57

bum-bayan
От:
Зарегистрирован: 2010-09-03
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

Простите за глупый вопрос, я новичок))



Офлайн

#4 Сен. 8, 2010 16:47:52

bum-bayan
От:
Зарегистрирован: 2010-09-03
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

Доброго времени суток. Еще вопрос созрел.

def runAction(cmd):
global logpath, proc
logfile = open(logpath, 'w')
proc = subprocess.Popen(cmd, stdout = logfile, stderr = logfile)
def OnCloseWindow(self, event):
global proc
self.Destroy()
os.kill(proc.pid, signal.SIGKILL)
В функции runAction запускаю дочерний процесс, перенаправляя stdout и stderr в лог. В функции OnCloseWindow убиваю этот дочерний процесс. Если вызываю эту функцию до окончания работы дочернего процесса, то в логе пусто, хотя дочерний процесс плюет в stdout примерно каждые 2 секунды.
Как можно принудительно завершить дочерний процесс, чтобы в логе осела выданная им информация?



Офлайн

#5 Сен. 8, 2010 21:21:18

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

bum-bayan
Как можно принудительно завершить дочерний процесс, чтобы в логе осела выданная им информация?
Маленький, но рабочий пример дайте. На котором можно попробовать. Я так понимаю это GTK…

В качестве общих рекомендаций - попробуйте вместо KILL вызывать sys.exit. Т е сделайте нормальное завершение программы с нормальным закрытием файла.



Офлайн

#6 Сен. 9, 2010 09:41:27

bum-bayan
От:
Зарегистрирован: 2010-09-03
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

Разобрался. Просто слал сигнал SIGINT и лог сохранялся:)



Офлайн

#7 Сен. 9, 2010 18:24:49

bum-bayan
От:
Зарегистрирован: 2010-09-03
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

Еще вопрос по теме. Запускаю дочерний процесс с перенаправлением stdout'а в лог. Теперь хочу читать этот файл и в зависимости от прочитанного выдавать в ГУЙ информацию о состоянии работы скрипта. Но вот проблема, если открывать файл так:

logfile = open(logpath, 'w')
, то он затирает старое содержимое(это хорошо), но тогда не могу читать из него. Если открывать и на чтение и на запись:
logfile = open(logpath, 'r+')
, то старое содержимое не затирается(это хреново), но тогда могу читать из него.
Ждать завершения скрипта, после чего читать файл - не вариант, т. к. скрипт объемный.
Подскажите, пожалуйста, как читать лог запущенного скрипта, не дожидаясь окончания работы оного.



Офлайн

#8 Сен. 9, 2010 19:55:37

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

лог вывода дочернего процесса

logfile = open(logpath, ‘w+’) :))))



Офлайн

#9 Сен. 13, 2010 19:05:50

bum-bayan
От:
Зарегистрирован: 2010-09-03
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

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

#Thread class for log reading...
class ReadLogThread(threading.Thread):
def __init__(self, fd):
threading.Thread.__init__(self)
self.fd = fd
def run(self):
self.fd.seek(0)
print self.fd.tell()
for line in self.fd:
print line,
logfile = open(logpath, 'w+')
proc = subprocess.Popen(cmd, stdout = logfile, stderr = logfile)
read_thread = ReadLogThread(logfile)
read_thread.start()
Подскажите, что я делаю не так.



Офлайн

#10 Сен. 14, 2010 19:44:13

bum-bayan
От:
Зарегистрирован: 2010-09-03
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

лог вывода дочернего процесса

Простите за пост с мутным содержанием. Решил копать с другой стороны, а именно работать с выводом запущенного скрипта через pipe.

def execCmd(cmd):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in proc.stdout:
print line,
Но вот проблема: пока не завершится скрипт cmd, управление не передается дальше, я мне бы хотелось парсить stdout запущенного скрипта по мере поступления туда информации. Подскажите, как это разрулить, или хотя бы в какую сторону копать.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version