Как работать с процессами?

Я видел подобные вопросы здесь, но я не получил свой ответ. Может быть, это потому, что я новичок во всем этом и просто не понимаю. Я хочу, чтобы мое приложение работало в основном как индикатор. И если пользователь запустит его снова, он проверит, запущен ли он, если это так, затем передаст все входные данные этому процессу и выйдет.

  • Итак, сначала мне нужно проверить, работает ли он. Я видел ответ, где вы можете создать файл-ведьму при запуске программы, а затем проверить, существует ли он ... Но что, если кто-то его удалит? Разве я не могу просто спросить у ОС, есть ли процесс с именем «myApp» или что-то в этом роде?
  • Следующее, что я на самом деле не понимаю, это как общаться с процессом. Как мне дать ему входные данные и что он будет с этим делать? Работает ли это так же, как запуск нового приложения через метод main ()?

Я пытаюсь создать это с помощью Quickly. Поэтому было бы неплохо, если бы вы могли дать мне несколько примеров Python или ссылку на что-то подобное.

5
задан 1 September 2012 в 11:18

2 ответа

На самом деле есть пакет с именем python-psutil для предоставления информации о процессе с использованием кодов Python.

Вы можете получить пакет здесь http://packages.ubuntu.com/lucid/ python-psutil

Существует еще один полезный пакет, названный вами PSI

PSI - это пакет Python, обеспечивающий доступ к процессам в режиме реального времени и другая разная системная информация, такая как архитектура, время загрузки и файловые системы. Он имеет pythonic API, который является единым для всех поддерживаемых платформ, но также предоставляет информацию о платформе, где это желательно.

Больше информации здесь: https://bitbucket.org/chrismiles/psi/wiki/Home

еще одна ссылка: https://stackoverflow.com/questions / 2703640 / процесс-лист-на-Linux-через-питона

0
ответ дан 1 September 2012 в 11:18

Я узнал, что мне действительно нужен DBus для достижения того, что мне нужно. Итак, вот что мне действительно нужно было сделать:

  1. Проверить, работает ли мой сервис на dbus
  2. Если это так, передать все мои входные переменные в него и выйти
  3. если он не создаст мой сервис dbus и не запустит мою программу
    на Python, это будет выглядеть примерно так:


# using quickly...  
#     
#   __init__.py  
# # # # # # # # # # # # #  
import dbus  
import sys  
from gi.repository import Gtk  
# import whatever else you need...  

from my_app import MyAppDBusService
# import whatever else from your app...

def main():
    bus = dbus.SessionBus()

    # Check if my app is running and providing DBus service
    if bus.name_has_owner('com.example.myApp'):
        #if it is running pass the commandline variables to it and exit

        #get my service from DBus
        myService = bus.get_object('com.example.myApp', '/com/example/myApp')
        #get offered method from DBus
        myMethod = myService.get_dbus_method('my_method', 'com.example.myApp')
        #call the method and pass comandline varialbes
        myMethod(sys.argv)
        #exit
        sys.exit(0)
    else:
        #if not running
        #run my DBus service by creating MyAppDBusService instance
        MyAppDBusService.MyAppDBusService()

        #do whatever with sys.argv...
        #...

        Gtk.main()

# MyAppDBusService.py
# # # # # # # # # # # # # #

import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
#import whatever else you need...

# use the dbus mainloop
DBusGMainLoop(set_as_default = True)

class MyAppDBusService(dbus.service.Object):
    def __init__(self):
        # create dbus service in the SessionBus()
        dbus_name = dbus.service.BusName('com.example.myApp', bus=dbus.SessionBus())
        dbus.service.Object.__init__(self, dbus_name, '/com/example/myApp')

    # offer a method to call using my dbus service
    @dbus.service.method('com.example.myApp')
    def my_method(self, argv):
        #do whatever with argv...
0
ответ дан 1 September 2012 в 11:18

Другие вопросы по тегам:

Похожие вопросы: