os.exec в Windows - PullRequest
       42

os.exec в Windows

9 голосов
/ 10 августа 2011

У меня есть скрипт, который вызывает os.execvp в другой экземпляр Python.После этого я, кажется, присоединяюсь к экземпляру cmd.exe, а не к экземпляру Python, который я только что создал.Экземпляр Python, однако, отвечает на Ctrl + C .

H:\bin>Python 3.2.1 (default, Jul 10 2011, 21:51:15) [MSC v.1500
 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hi')
Can't find file ('hi')

H:\bin>

H:\bin>
KeyboardInterrupt
>>> echo hi
hi

Вызов exec:

from sys import argv
os.execvp('python', argv)

Как заменить оригинальный экземпляр Python нановый, согласно поведению, которое можно увидеть в Linux?

1 Ответ

2 голосов
/ 12 августа 2011

В Unix исполняемые двоичные файлы разбиты на два этапа: fork (3) для клонирования текущего процесса и exec (3) для загрузки исполняемого файла в адресное пространство.В Windows есть только CreateProcess , который делает то же самое, что и fork + exec.

Для мобильности лучше всего использовать subprocess.Popen (что также работает правильноцитирование имени файла в Windows в отличие от os. * (аналог) * в 1011 *http://docs.python.org/library/subprocess.html#replacing-the-os-spawn-family

...