Найти - Пользователи
Полная версия: лог вывода дочернего процесса
Начало » Python для новичков » лог вывода дочернего процесса
1 2
bum-bayan
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. Как перенаправить вывод этого запущенного скрипта в файл?
JOHN_16
где то ты что то не дочитал:
subprocess.Popen('./test0.py', stdout = logfile, stderr = logfile)
bum-bayan
Простите за глупый вопрос, я новичок))
bum-bayan
Доброго времени суток. Еще вопрос созрел.
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 секунды.
Как можно принудительно завершить дочерний процесс, чтобы в логе осела выданная им информация?
Alex2ndr
bum-bayan
Как можно принудительно завершить дочерний процесс, чтобы в логе осела выданная им информация?
Маленький, но рабочий пример дайте. На котором можно попробовать. Я так понимаю это GTK…

В качестве общих рекомендаций - попробуйте вместо KILL вызывать sys.exit. Т е сделайте нормальное завершение программы с нормальным закрытием файла.
bum-bayan
Разобрался. Просто слал сигнал SIGINT и лог сохранялся:)
bum-bayan
Еще вопрос по теме. Запускаю дочерний процесс с перенаправлением stdout'а в лог. Теперь хочу читать этот файл и в зависимости от прочитанного выдавать в ГУЙ информацию о состоянии работы скрипта. Но вот проблема, если открывать файл так:
logfile = open(logpath, 'w')
, то он затирает старое содержимое(это хорошо), но тогда не могу читать из него. Если открывать и на чтение и на запись:
logfile = open(logpath, 'r+')
, то старое содержимое не затирается(это хреново), но тогда могу читать из него.
Ждать завершения скрипта, после чего читать файл - не вариант, т. к. скрипт объемный.
Подскажите, пожалуйста, как читать лог запущенного скрипта, не дожидаясь окончания работы оного.
Андрей Светлов
logfile = open(logpath, ‘w+’) :))))
bum-bayan
Доброго времени суток. Пытаюсь читать лог запущенного скрипта в отдельном потоке. Скрипт плюет в файл строки разделяя их пустой строкой. Проблема в том, что весь файл не читается, а читается только первая строка.
#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()
Подскажите, что я делаю не так.
bum-bayan
Простите за пост с мутным содержанием. Решил копать с другой стороны, а именно работать с выводом запущенного скрипта через pipe.
def execCmd(cmd):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in proc.stdout:
print line,
Но вот проблема: пока не завершится скрипт cmd, управление не передается дальше, я мне бы хотелось парсить stdout запущенного скрипта по мере поступления туда информации. Подскажите, как это разрулить, или хотя бы в какую сторону копать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB