【问题标题】:Windows Batch start python script with pipeWindows 使用管道批量启动 python 脚本
【发布时间】:2016-05-31 10:50:00
【问题描述】:

我正在尝试创建一个可以运行它的批处理脚本或计划任务:

pythonw manage.py runserver >nul

如果我从命令提示符处编写它,它将运行,并返回提示符,但如果我尝试使用批处理文件或计划任务运行它,它将打开一个窗口并将自身锁定在该命令中。 我将关闭的窗口添加一个最终的“退出”,但除非我在任务管理器中终止该进程,否则它将被锁定在第一个命令中。

我该怎么做?如果它在普通 cmd 中工作,为什么在 .bat 或 .cmd 文件中工作方式不同?

【问题讨论】:

  • 我不知道 python,但是 pythonw 是一个 GUI 程序,因此无法访问启动它的控制台。因此>nul 毫无意义。但是,您的具体问题是其他问题 - 在批处理中 CMD 等待 GUI 程序退出(交互式 CMD 仅等待控制台程序)。请参阅start /? 以获得有关这方面的帮助(它解释了使用和不使用start 来启动程序 - 与 Windows NT4 相比,Windows 2000 的新行为)。您可能应该使用python,但是如果您想在不是为它设计的控制台中使用 GUI python,请参阅start /w
  • 带有 >nul 的部分是因为 manage.py 是一个 django 脚本,它不打算以这种方式运行,并且在您使用它创建的网络服务器执行的每个操作中都使用标准输出。这是一种解决方法,可以让 Django 开发服务器在没有控制台的情况下启动,并且没有日志只是为了进行核心测试。
  • 我的意思是 start 没有 /w

标签: python windows batch-file cmd


【解决方案1】:

好的,经过越来越多的测试,我发现了一些可行的方法。很抱歉在没有进行更多搜索和测试的情况下提出问题。

这是有效的:

CMD /c start "" /B path\to\pythonw.exe path\to\manage.py runserver > nul ^& exit

在 .cmd 文件中。 执行该文件会正确启动 Django 开发网络服务器,并且运行该 .cmd 文件的计划任务也会启动服务器。

【讨论】:

  • 如果你只使用start "" /B path\to\pythonw.exe path\to\manage.py runserver > nul会发生什么? /B 是强制 cmd.exe 设置 stdout 句柄所必需的,但为什么需要 cmd /c ... ^& exit? pythonw.exe 不使用控制台,所以应该没有问题;批处理应该继续并退出。 start "" /B pythonw.exe -c "import time;time.sleep(60)" >nul 对我来说很好。如果我附加一个调试器,我可以看到@$peb->ProcessParameters->StandardOutputnul 设备,而StandardInputStandardError 未设置为NULL
  • 好吧,我真的不知道我为什么需要它,但我知道的是,如果没有它,当我启动它时,它会打开一个命令窗口并且不会关闭它,除非我手动操作。此外,de 问题是因为 manage.py 的工作方式
猜你喜欢
  • 1970-01-01
  • 2020-08-20
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2019-07-17
  • 2018-10-15
  • 1970-01-01
相关资源
最近更新 更多