【问题标题】:How to stop CMD (from subprocess.popen) closing when an Exception is raised?引发异常时如何停止 CMD(来自 subprocess.popen)关闭?
【发布时间】:2020-05-15 21:34:23
【问题描述】:

我正在使用subprocess.popen 使用给定的 python 文件生成多个 CMD。最后都是input()。问题是如果代码中有任何引发的异常,窗口就会关闭,而我看不到它发生了什么。

无论错误如何,我都希望它保持打开状态。所以我可以看到它。或者在主窗口中返回错误,例如此脚本因此无法运行..

我在 Windows 上运行它:

import sys
import platform
from subprocess import Popen,PIPE

pipelines = [("Name1","path1"),
         ("Name2","path2")]

# define a command that starts new terminal
if platform.system() == "Windows":
  new_window_command = "cmd.exe /c start".split()
else:  #XXX this can be made more portable
  new_window_command = "x-terminal-emulator -e".split()
processes = []
for i in range(len(pipelines)):
  # open new consoles, display messages
  echo = [sys.executable, "-c",
        "import sys; print(sys.argv[1]);  from {} import {}; obj = {}(); obj.run();  input('Press Enter..')".format(pipelines[i][1],pipelines[i][0],pipelines[i][0])]
  processes.append(Popen(new_window_command + echo + [pipelines[i][0]])) 

for proc in processes:    
  proc.wait()

【问题讨论】:

  • 获取新控制台的方法是使用选项creationflags=subprocess.CREATE_NEW_CONSOLE,直接运行命令而不是通过cmd.exe /c。 CMD的start命令不会等待并设置退出码,默认不会。可以通过结合/w 选项和CMD 的exit 命令使其工作,但除非该命令仅通过start 工作,否则不值得。
  • 是的,这是有道理的。我可以将其更改为使用新的控制台标志,但是我应该如何阻止它关闭,或者在主窗口上获得引发的异常?我看到如果我打印出等待函数,我会得到 0 或 1,但我确实得到了 1 用于从代码中引发的异常和 0 用于键盘中断。

标签: python windows error-handling subprocess popen


【解决方案1】:

要查看错误,请尝试将所需的代码片段包装在 try / except

try:
    ...
except Exception as e:
    print(e)

【讨论】:

  • 这不是一个坏主意,但我认为我不能在我传递的字符串中做到这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 2019-11-26
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多