python - 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
解决方案
我认为 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 在单独的窗口中运行。
推荐阅读
- typescript - 打字稿泛型:返回类参数的实例
- apostrophe-cms - 撇号中不同版本的jquery冲突
- makefile - 制作:意外标记'--initialization'附近的语法错误
- python - 如何将 svg 文件加载到我的 python 烧瓶页面中?
- regex - 在 YML 正则表达式中跳过多行
- php - 如何将不同的单个数组存储到数据库?
- typescript - 如何在 Backlogs 窗口中获取选定的 Backlog 项目?
- java - 如何更改 TestNG 报告中的异常消息
- java - 如何检查一个数字的每个数字是否大于或等于另一个数字?
- javascript - 如何禁用默认视频控件并显示自定义搜索栏