我有一个脚本将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实例?
答案 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