питон.Если программа останавливается, должен запускаться новый экземпляр - PullRequest
0 голосов
/ 23 октября 2011

Windows 7 64bit, python26

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

Следующий код работает для notepad.exe, но продолжает порождать новые minecraft_servers, даже если предыдущий не остановился. Зачем? И что мне делать?

Я новичок в Python.

import Queue, thread, subprocess, time

results= Queue.Queue()
def process_waiter(popen, description, que):
    try: popen.wait()
    finally: que.put( (description, popen.returncode) )
process_count= 0

while True:
    proc1= subprocess.Popen( "C:\\Users\\Bo\\AppData\\Roaming\\.minecraf\\Minecraft_Server.exe")
    thread.start_new_thread(process_waiter,
    (proc1, "1 finished", results))
    process_count+= 1

    time.sleep(10)

    while process_count > 0:
        description, rc= results.get()
        print "job", description, "ended with rc =", rc
        process_count-= 1

1 Ответ

3 голосов
/ 23 октября 2011

Неясно, почему многопоточность участвует в перезапуске процесса.Работает ли это для вас:

while True:
    proc = subprocess.Popen("C:\\Users\\Bo\\AppData\\Roaming\\.minecraf\\Minecraft_Server.exe")
    proc.wait()
    print 'Minecraft_Server process terminated.  Restarting now'

Предложения:

  • начните с нескольких строк кода, которые работают, затем добавьте функции
  • использование многопоточность in вместо thread
  • не называйте переменную «popen» из-за ее сходства с именем функции в подпроцессе.
  • добавьте протоколирование илинапечатать операторы, чтобы вы могли узнать, что делает скрипт
  • контролировать создание процесса с помощью диспетчера задач
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...