Как сделать os.execv () в Python в Windows без отсоединения от консоли? - PullRequest
6 голосов
/ 01 сентября 2011

Я использую Python 2.6 в Windows 7. У меня есть файл .cmd для Windows, который вызывает Python для запуска веб-сервера CherryPy (версия 3.1.2).Я запускаю этот файл .cmd, выполняя его по приглашению в оболочке Windows CMD.Когда CherryPy замечает, что один из его зависимых файлов изменился, он перезапускается.Есть несколько проблем, которые возникают в этой конфигурации в Windows, потому что CherryPy использует для перезапуска себя

os.execv(sys.executable, args)

, но вы не можете вызвать исполняемый файл Python для файла .cmd.Мне удалось обойти эту проблему с помощью различных упражнений Python, и теперь я могу перезапустить ее, вызвав (по существу)

os.execv(sys.argv[0], args)

Но перезапущенный процесс отсоединен от клавиатуры;он поймает Ctrl-C, а затем меня спросят

Terminate batch job (Y/N)?

, но тип Y или NI перехватывается не завершающим файлом .cmd, а оболочкой CMD Windows, и он отвечает

'Y' is not recognized as an internal or external command, operable program or batch file.

Так как мне настроить Windows, чтобы перезапустить процесс в Unix, который я бы назвал «передним планом»?

1 Ответ

0 голосов
/ 01 сентября 2011

вы можете использовать метод subprocess.call, как в этом примере

import subprocess

retcode = subprocess.call(["ls", "-l"])

см. Эту ссылку для получения дополнительной информации о классе подпроцесса:

подпроцесс - Управление подпроцессом

...