Windows上的os.exec

时间:2011-08-10 00:39:02

标签: python windows windows-xp python-3.x exec

我有一个脚本将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)

如何根据Linux上可能看到的行为替换原始Python实例?

1 个答案:

答案 0 :(得分:2)

在Unix上执行二进制文件分为两个阶段 - fork(3)来克隆当前进程,exec(3)将可执行文件加载到地址空间。在Windows上只有CreateProcess与fork + exec完全相同。

为了便于携带,最好的办法是使用subprocess.Popen(在Windows上进行正确的文件名引用,与os。*对应文件不同),如http://docs.python.org/library/subprocess.html#replacing-the-os-spawn-family