首页 > 解决方案 > python os.popen 不适用于等待方法

问题描述

我正在尝试使用 python 自动化一些手动步骤,我正在使用 os.popen 打开新的命令提示符并运行 docker compose up .. 它打开新的 cmd 并运行 docker 命令,现在我想在 docker 命令之后运行下一组命令起来了... python 脚本必须等到那个时候,我尝试使用下面的代码,但它不起作用。我尝试使用 subprocess.Popen ,它具有等待方法但它没有打开新的 cmd,它只在 python 脚本运行命令提示符下运行 .. p=os.popen("Start cmd /K docker-compose up") p.wait

标签: pythonpython-3.x

解决方案


我认为 windows cmd 中的“start”命令运行一个进程,该进程以该行的其余部分作为参数启动一个子进程,然后立即完成。我想这就是为什么它不等到 docker-compose 完成(或您在“开始”之后编写的任何命令)。

带有进程 ID (PID) 的示例:您的 python 程序 (PID 1) 运行命令“start cmd /K docker-compose up”。启动进程的 PID 为 2。启动启动“cmd /K docker-compose up”(PID 为 3 的新进程)。开始结束。您的程序一直等到 PID 2 结束(它已经结束,所以无需等待即可继续)。

您在示例中真正想要的是等到 PID 3 完成而不是 PID 2。

可能您可以通过一些技巧获得子进程的真实 PID,然后等待它完成,但您应该考虑是否真的需要 docker-compose 在单独的窗口中运行。


推荐阅读