Управление процессами в Windows 7 / Vista - как запустить внешнюю программу после длительного простоя? - PullRequest
2 голосов
/ 03 февраля 2012

Это продолжение вопроса , который .

По сути, у меня есть скрипт на python, который должен запускать другую программу (.exe) через таймер через 2-6 часов.,Все работает нормально, пока я тестирую его с коротким обратным отсчетом или пока компьютер "активен" (= userinput before, экран включен) до истечения таймера или пока не работает другая программа в это же время (Сценарий Excel VBA в моем случае).

В Windows 7 при длительном обратном отсчете и при запуске Excel внешняя программа просто не открывается.Никаких сообщений об ошибках и любых других (python-internal) команд ПОСЛЕ того, чтобы они выполнялись должным образом.

Я использую команду x=subprocess.Popen([program,args],flags) и перепробовал почти все возможные флаги (Shell,buffersize, creationflags, stdout и т. д.) и альтернативы (вызов), но он ведет себя всегда, как описано выше.

Теперь я заметил подобное поведение при попытке открыть внешнюю программу через VBA, поэтому я не думаю, что это Python-специфичная, но специфичная для Windows проблема.Кроме того, я попробовал его на другом ПК с Windows Vista, и там он работает удивительно (оба 64-разрядных, если это имеет значение).

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

У кого-нибудь есть идея?Большое спасибо, я расстраиваюсь медленно ...

1 Ответ

0 голосов
/ 06 марта 2012

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

def wait(sec,sleeptime = 0):
    import time
    endsecs = time.time() + sec
    while True:
        if endsecs <= time.time():
            return None
        if sleeptime != 0:
            time.sleep(sleeptime)

Просто предположение, ничего определенного, нет времени для проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...