Как предотвратить, чтобы subprocess.popen «терялся» в Windows? - PullRequest
2 голосов
/ 16 января 2012

У меня странная проблема с Python (3.x):
По сути, я просто хочу создать таймер, который вызывает внешнюю программу (.exe) в заранее определенное время - (упрощенно ниже, кроме того, есть обратный отсчет):

time.sleep(y)
x=popen("pathto.exe")

Если я проверяю свой код, все работает точно так, как я хочу, НО только для маленьких y. При больших значениях y (подождите более нескольких часов) Python не выполняет команду popen (но также нет ошибок). Любой другой «нормальный» код после команды popen (например, уведомление по электронной почте в моем случае) работает нормально.

Я не совсем уверен, что это Windows (я работаю на 64-битной Windows 7, отключил все функции энергосбережения, о которых я знаю) или проблема с Python, но пока не могу найти решение:
Я попробовал несколько дополнительных аргументов для popen (Shell / no Shell и т. Д.) И попытался открыть программу / определить X перед периодом ожидания и снова закрыть его после этого, но, к сожалению, ничего не решило.

Большое спасибо!

Редактировать: более подробный пример кода:

while 1:
    if time.mktime(trade2)<=time.time():

        break

    else:
        dif=time.mktime(trade2)-time.time()  # this is just for a visible countdown
        aus=time.gmtime(dif)
        sys.stdout.flush()
        print("\b\b\b\b\b\b\b\b\b", end="\r")
        print(aus[3],aus[4],aus[5], sep=":",end="")
        time.sleep(0.5)

x=subprocess.Popen("c:/xyz/abc.exe")
print("Sending Mail...")

print () ВСЕГДА выполняется как положено, Popen только при обратном отсчете менее 1-2 часов.

1 Ответ

1 голос
/ 16 января 2012

Сон не имеет гарантированного времени пробуждения. Согласно документам сон может длиться дольше или короче, чем требуется. Я ответил на этот вопрос ранее на SO, с альтернативами.

...