【问题标题】:Wait for subprocess .exe to finish before proceeding in Python等待子进程 .exe 完成,然后在 Python 中继续
【发布时间】:2016-08-09 09:29:23
【问题描述】:

我正在我的代码中运行一个应用程序,它会重写我需要稍后在代码中读取的文件。没有输出直接进入我的程序。我不能让我的代码等到子进程完成,它只是继续读取未更改的文件。

我已经尝试过 subprocess.Popen.wait()、subprocess.call() 和 subprocess.check_call(),但它们都不能解决我的问题。有谁知道如何使这项工作?谢谢。

编辑:这是我的代码的相关部分:

    os.chdir('C:\Users\Jeremy\Documents\FORCAST\dusty')
    t = subprocess.Popen('start dusty.exe', shell=True)
    t.wait()      
    os.chdir('C:\Users\Jeremy\Documents\FORCAST')

【问题讨论】:

  • 人们通常抱怨相反;即阻塞子进程。你的代码是什么样的? (将其添加到问题中)
  • 也许应用程序产生了一个单独的进程并在这样做后立即返回。
  • 我怎么知道是否发生了这种情况,如果发生了,我将如何解决?
  • 为什么要在 shell 中启动 exe?你可以直接运行它,不是吗?
  • @Spuds 这两个subprocess 变体中的任何一个都有效吗? pastebin.com/raw/0Usu2f36 您也可以通过subprocess' cwd=/path/to/dir/ 选项设置当前工作目录。确定需要shell=True? (可能存在安全风险)

标签: python subprocess wait popen


【解决方案1】:

你使用 subprocess.Popen() 的返回对象吗?

p = subprocess.Popen(command)
p.wait()

应该可以。

您确定命令不会立即结束吗?

【讨论】:

  • 这就是我现在所拥有的。命令运行,但我的代码没有等待。
  • 请显示您的代码并查看@martineau 对您的问题的评论
【解决方案2】:

如果你执行一个程序

t = subprocess.Popen(prog, Shell=True)

无论程序是否存在,Python 都不会抛出错误。如果你尝试用 Popen 和 Shell=False 启动一个不存在的程序,你会得到一个错误。我的猜测是您的程序要么不存在于文件夹中,要么不执行。尝试在 Python IDLE 环境中使用 Shell=False 执行,看看是否有新窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2015-10-04
    • 2013-04-25
    • 2019-11-01
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多