Запустите rtorrent на фоне использования Python - PullRequest
0 голосов
/ 27 июня 2011

Можно ли запустить клиент rtorrent в фоновом режиме с помощью Python? Я пытаюсь сделать это с помощью потоков импорта PIPE из подпроцесса импорта Popen, PIPE

class RunClient(threading.Thread):
    queue_cmd = None 
    torrent = None
    def __init__(self,q_cmd,torrent):
        self.queue_cmd = q_cmd
        threading.Thread.__init__(self)
        self.torrent = torrent

    def run(self):
        """Run client"""
        FNULL = open('/dev/null', 'w')
        print(self.torrent.getRun())
        process = Popen(self.torrent.getRun(),stdout=FNULL,stdin=FNULL)
        self.queue_cmd.put(process)
        process.communicate()[0]

Этот скрипт должен запустить rTorrent и вернуть объект с его PID.

class Clients(threading.Thread):


    pids = {}
    q_cmd = None

    def __init__(self,q_cmd):
        """ """
        self.q_cmd = q_cmd
        threading.Thread.__init__(self)

    def startClient(self,id):
        """ """
        q = Queue.Queue(0)
        rClient = RunClient(q,Torrent())
        rClient.start()
        self.pids[id] = q.get()
        print self.pids

    def run(self):
        """Run torrent client"""
        print("Start thread...")
        self.startClient(50)
        i=0
        print("Start while...")
        while i<20:
            time.sleep(1)
            print(">>>",self.pids[50].pid)
            i=i+1

Этот скрипт пытается запустить поток с rTorrent и в цикле набрать его PID. Но когда я запускаю клиент как / dev / null для stdin и stdout, он не запускается. Когда я перехожу на: process = Popen(self.torrent.getRun(),stdout=PIPE,stdin=PIPE) В этом коде основной поток ожидает, пока закрывается rtorrent.

Возможно, кто-то поможет решить эту проблему, или, может быть, я что-то не так делаю.

1 Ответ

0 голосов
/ 27 июня 2011

Две проблемы здесь:

  1. process.communicate () будет блокироваться до завершения процесса.
  2. rtorrent предназначен для работы в терминале, он бесполезен, если вы не запускаете его в tty / pty.
...