Windows上的os.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)
我该如何将原来的 Python 实例替换成新的那个,就像在 Linux 上的表现一样?
1 个回答
4
在Unix系统中,执行程序分为两个步骤:首先是fork(3),这个步骤是用来复制当前的进程;然后是exec(3),这个步骤是把可执行文件加载到内存中。在Windows系统中,只有一个CreateProcess,它同时完成了fork和exec的功能。
为了让你的代码在不同系统上都能运行,最好的选择是使用subprocess.Popen(这个方法在Windows上也能正确处理文件名的引号,而不像os.*系列的函数那样)。你可以参考这个链接了解更多。