我有一个 Python 脚本,想将其作为 Windows 上的后台进程运行。
我可以在 Linux 上使用以下命令执行此操作:
python script.py &
然后使用以下命令断开该进程与终端的连接:
disown
在 Windows 上,到目前为止我所拥有的只有这些:
start /b python script.py
但是,如果我关闭 CMD 窗口,脚本就会停止运行。我是否缺少任何额外的命令来让脚本在后台运行?
答案1
start
应该已经是正确的方向了。但是,/b
将其附加到同一个控制台。现在的问题是,当关闭控制台窗口时,与此控制台关联的任何进程也将关闭。
您可以使用start
without /b
,然后它将在新控制台中运行。但是,如果您想在没有控制台窗口的情况下在后台运行它,则需要使用 VBScript 或第三方工具:以完全隐藏的方式运行批处理文件
但是,在这种情况下,您将不再看到 stdout/stderr 输出。不过,您可以将其重定向到文件,方法是将其包装在调用中cmd /c your_command > stdout.txt 2> stderr.txt
,并通过上述方法之一(VBScript、第三方工具等)启动此调用。
或者,您也可以在退出之前隐藏自己的控制台窗口。我刚刚编写了一个小的单行程序,它就是用来做这个的(源代码基本上是ShowWindow(GetConsoleWindow(), SW_HIDE)
):http://share.cherrytree.at/showfile-24286/hide_current_console.exe
这样,您可以使用start /b
,当您想要“关闭”控制台(技术上隐藏它)时,您可以运行hide_current_console & exit
隐藏控制台,然后关闭cmd.exe进程(而不是python进程) - 在一行中,因为exit
在控制台已经隐藏后您无法输入。
答案2
我发现以下方法对我来说很有效:
run python script.py
注意:这需要 cygwin