Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 29, 2010 10:30:46

da3mon
От:
Зарегистрирован: 2010-06-29
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Привязка процесса к файлу

Всем привет!

В процессе изучения возникла задача: вывешивать на экране уведомление, если существует определенный файл, и убирать уведомление, если файл не был создан (был удален).
Пытаюсь решить так:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import commands, os, time

while True:
process_run = commands.getoutput('ps -A | grep dzen2')
file_exists = os.path.exists('mcabber.state')

if file_exists and not process_run:
print('File exists and no process. Starting...')
os.system('echo "^fg(green)PENDING ^fg(red)EVENTS" | dzen2 -p')

if file_exists and process_run:
print('File exist and process running. Do nothing')

if not file_exists and process_run:
print('File doesn`t exist and process running. Stopping...')
os.system('killall dzen2')

if not file_exists and not process_run:
print('File doesn`t exist and process doesn`t running. Do nothing')

time.sleep(2)
При выполнении строки 12 возникает проблема: процесс стартует, но он уже не завершается в случае, если удалить файл. При этом, если закомментировать все вызовы os.system(…) в скрипте, то он выполняется так, как мне нужно. Это подтверждается верным выводом print(…). Видимо, после выполнения команды в строке 12, прерывается выполнение нижерасположенных команд. Как это можно исправить?

Python 2.6.5, OS Ubuntu 10.04.
Нумерация строк в скрипте видна здесь



Офлайн

#2 Июнь 29, 2010 14:06:36

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Привязка процесса к файлу

используй subprocess, запустишь дочерний процесс не блокируя текущий, прервешь дочерний когда надо.

Офлайн

#3 Июнь 29, 2010 14:18:28

da3mon
От:
Зарегистрирован: 2010-06-29
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Привязка процесса к файлу

Спасибо за подсказку, попробую.



Офлайн

#4 Июнь 29, 2010 14:50:58

Norecces
От:
Зарегистрирован: 2010-04-13
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

Привязка процесса к файлу

import threading

class backgroundTask(threading.Thread):
def __init__(self):
# Do initialization what you have to do
self.check=True
def run(self):
if self.check and checkSomething():
break
time.sleep(0.1)

bg = backgroundTask()
bg.start()

print 'hello! checkSomething() is running in the background'
# do some more operations...
#....
bg.join()# you wait for background task to finish.

print 'The End...'



Офлайн

#5 Июнь 29, 2010 16:14:53

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Привязка процесса к файлу

потоки тут лишние, достаточно типа такого:

p = supbrocess.Popen('./process.sh',shell=True)
while not p.poll():
time.sleep(1)
либо
p = supbrocess.Popen('./process.sh',shell=True)
p.wait()

Офлайн

#6 Июнь 29, 2010 17:22:26

da3mon
От:
Зарегистрирован: 2010-06-29
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Привязка процесса к файлу

Всем спасибо за советы!
Вот этот вариант работает как надо:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess, commands, os, time

proc = 'echo "^fg(green)PENDING ^fg(red)EVENTS" | dzen2 -p'
while True:
process_run = commands.getoutput('ps -A | grep dzen2')
file_exists = os.path.exists('mcabber.state')

if file_exists and not process_run:
subprocess.Popen(proc, shell=True)

if not file_exists and process_run:
os.system('killall dzen2')

time.sleep(2)



Отредактировано (Июнь 29, 2010 17:30:43)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version