Найти - Пользователи
Полная версия: Привязка процесса к файлу
Начало » Python для новичков » Привязка процесса к файлу
1
da3mon
Всем привет!

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

#! /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.
Нумерация строк в скрипте видна здесь
o7412369815963
используй subprocess, запустишь дочерний процесс не блокируя текущий, прервешь дочерний когда надо.
da3mon
Спасибо за подсказку, попробую.
Norecces
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...'
o7412369815963
потоки тут лишние, достаточно типа такого:
p = supbrocess.Popen('./process.sh',shell=True)
while not p.poll():
time.sleep(1)
либо
p = supbrocess.Popen('./process.sh',shell=True)
p.wait()
da3mon
Всем спасибо за советы!
Вот этот вариант работает как надо:

#! /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)
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