当前位置: 首页 > 面试题库 >

Python:在Windows上启动新的命令提示符,然后等待其完成/退出

狄新翰
2023-03-14
问题内容

我不明白为什么在Windows上很难做到这一点。

我想产生一堆将运行其他脚本的命令提示符窗口。我想要这样做的原因是这样,我可以整齐地看到每个脚本的所有输出(如果我只是在主窗口中将它们作为线程/子进程,则无法正确查看所有输出)。我也不想记录输出,因为它主要用于查看进度条,而实际上不适用于日志文件。

因此,我需求的各个部分都可以工作,但不能一起工作:

os.system("start cmd /c {command here}")     # Launches in new command prompt, closes when done

但是,操作系统不会让我等到命令完成(因为开始是实际命令,第二次它会打开新命令提示符,它是“完成”)

同样,如果我尝试:

p = subprocess.Popen(["start", "cmd", "/k", "{command here}"], shell = True) # Needs to be shell since start isn't an executable, its a shell cmd
p.wait()    # I can wait until finished (although it too finishes after start finishes)

那么我该怎么做呢?我在某处读到一个解决方案可能是使用进程组,但这仅是unix或类似的东西。

或者,如果您有一种巧妙的方式在一个窗口中显示所有子流程的输出,那么我就不需要打开新的命令提示符,而只需使用线程即可。那也可行,但是如果我说有4个线程下载一些东西并显示进度条以及输出其他信息,我不知道如何以一种可读的方式显示该信息(以及避免它们相互冲突)彼此)。

PS:这是在Windows
Vista上。PPS:我最好希望能在Windows,Linux和Mac上都可以使用的解决方案,我现在只专注于Windows,但是我想可以对这三个版本都可以使用的解决方案,而且我知道Windows是最灵活的。我只是将“
start cmd / c”替换为适合操作系统的命令。


问题答案:

阅读您对我之前的回答的评论后,您需要的是:

os.system("start /wait cmd /c {command}")

保持Windows命令引用总是在手!



 类似资料:
  • 问题内容: 我有一个脚本,可通过popen shell命令启动。问题在于脚本不会等到该popen命令完成后才继续运行。 如何告诉我的Python脚本等待shell命令完成? 问题答案: 根据您想如何使用脚本,您有两种选择。如果您希望命令阻塞并且在执行过程中不执行任何操作,则可以使用。 如果您想在执行过程中执行操作或将内容输入,可以在调用后使用。 如文档中所述,可能会死锁,因此建议进行通信。

  • 问题内容: 题 我想启动Chrome网络浏览器作为访问特定网站的过程,然后等待它关闭。 一种特殊情况是浏览器可能已经打开并正在运行,因为用户可能已经访问过某些网站。 在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,并且新启动的过程将立即终止。这不应该使我的等待过程感到困惑:要么,我想要一个新的浏览器窗口(如果可以通过命令行参数强制执行),然后等待直到将其关闭,或者保留现有的浏览器窗口,并等

  • 问题内容: 题 我想启动Safari Web浏览器作为访问特定网站的过程,然后等待直到它关闭。 一种特殊情况是浏览器可能已经打开并正在运行,因为用户可能已经访问过某些网站。 在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,并且新启动的过程将立即终止。这不应该让我的等待过程感到困惑:我要么想要一个新的浏览器窗口(如果可以通过命令行参数强制执行),然后等待直到关闭该窗口,要么保留现有的浏览器窗

  • 问题内容: 题 我想启动Firefox Web浏览器作为访问特定网站的过程,然后等待它关闭。 一种特殊情况是浏览器可能已经打开并正在运行,因为用户可能已经访问过某些网站。 在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,并且新启动的过程将立即终止。这不应该使我的等待过程感到困惑:要么,我想要一个新的浏览器窗口(如果可以通过命令行参数强制执行),然后等待直到将其关闭,或者保留现有的浏览器窗口

  • 在退出脚本(TCL/Bash)之前,如何确保所有后台进程都已完成执行。 我想把我所有的后台进程PID写到一个pidfile中。然后在最后pgrep PID file,看看在我退出之前是否还有进程在运行。 有什么更简单的方法吗?而TCL有没有具体的办法做到这一点呢?

  • 问题内容: 标题中已经存在的问题-如何使python脚本等到通过os.system()调用启动的某个过程完成?例如类似的代码 这将同时启动n次请求的进程,这可能会使我的PC有点汗水) 感谢您的任何建议。 问题答案: os.system() 确实 等待其过程完成后才返回。 如果您看到它不等待,则您正在启动的进程很可能会自行分离以在后台运行。在这种情况下,子进程。Popen+ wait示例Dor提供了