Форум сайта python.su
path = sys.path[0]
logpath = path + '/activate.log'
logfile = open(logpath, 'w')
pipe = subprocess.Popen('./test0.py', stdout = subprocess.PIPE, stderr = subprocess.PIPE)
Офлайн
где то ты что то не дочитал:
subprocess.Popen('./test0.py', stdout = logfile, stderr = logfile)
Офлайн
Простите за глупый вопрос, я новичок))
Офлайн
Доброго времени суток. Еще вопрос созрел.
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)
Офлайн
bum-bayanМаленький, но рабочий пример дайте. На котором можно попробовать. Я так понимаю это GTK…
Как можно принудительно завершить дочерний процесс, чтобы в логе осела выданная им информация?
Офлайн
Разобрался. Просто слал сигнал SIGINT и лог сохранялся:)
Офлайн
Еще вопрос по теме. Запускаю дочерний процесс с перенаправлением stdout'а в лог. Теперь хочу читать этот файл и в зависимости от прочитанного выдавать в ГУЙ информацию о состоянии работы скрипта. Но вот проблема, если открывать файл так:
logfile = open(logpath, 'w')
logfile = open(logpath, 'r+')
Офлайн
logfile = open(logpath, ‘w+’) :))))
Офлайн
Доброго времени суток. Пытаюсь читать лог запущенного скрипта в отдельном потоке. Скрипт плюет в файл строки разделяя их пустой строкой. Проблема в том, что весь файл не читается, а читается только первая строка.
#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()
Офлайн
Простите за пост с мутным содержанием. Решил копать с другой стороны, а именно работать с выводом запущенного скрипта через pipe.
def execCmd(cmd):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for line in proc.stdout:
print line,
Офлайн