如何在不脱离控制台的情况下在 Windows 中的 Python 中执行 os.execv()?

Posted

技术标签:

【中文标题】如何在不脱离控制台的情况下在 Windows 中的 Python 中执行 os.execv()?【英文标题】:How to do os.execv() in Python in Windows without detaching from the console? 【发布时间】:2011-11-08 00:55:20 【问题描述】:

我在 Windows 7 上使用 Python 2.6。我有 Windows .cmd 文件,它调用 Python 来运行 CherryPy Web 服务器(版本 3.1.2)。我通过在 Windows CMD shell 的提示符下执行这个 .cmd 文件来启动它。当 CherryPy 注意到其依赖文件之一已更改时,它会重新启动。在 Windows 上的这种配置中会出现几个问题,因为 CherryPy 用来重新启动自身的调用是

os.execv(sys.executable, args)

但您不能在 .cmd 文件上调用 Python 可执行文件。我已经设法通过各种 Python 体操绕过了这个问题,现在我已经通过调用(基本上)重新启动它

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

但重新启动的进程与键盘分离;它会抓住Ctrl-C,然后我被问到

Terminate batch job (Y/N)?

但是 Y 或 N I 类型不是被终止的 .cmd 文件捕获,而是被 Windows CMD shell 捕获,它会响应

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

那么我该如何在 Windows 中进行设置,以使重新启动的进程保持在我在 Unix 中称为“前台”的位置?

【问题讨论】:

这个问题link 是这个问题的一个更简单的版本。对该问题的回答将被视为对此问题的回答,但尚未得到令人满意的回答。 看看我对这个问题的新评论。 10 年后 - 任何想法如何解决这个问题?我是struggling with same issue ... 【参考方案1】:

你可以像这个例子一样使用 subprocess.call 方法

import subprocess

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

有关子流程类的更多信息,请参阅此链接:

subprocess — Subprocess management

【讨论】:

不行,和原来的方法有同样的缺陷。

以上是关于如何在不脱离控制台的情况下在 Windows 中的 Python 中执行 os.execv()?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用单例的情况下在多个视图控制器之间传递数据?

在不使用故事板中的导航控制器的情况下在 UIViewController 之间切换的最佳方法是啥?

如何在不重复代码的情况下在所有控制器中显示警报?

如何在不使用 segue 的情况下在视图控制器之间传递图像

在不使用 X-Windows 的情况下在 Linux 中设置或读取 Caps Lock 状态

iOS - 如何在不按下按钮的情况下在视图控制器之间移动