【问题标题】:Using Popen inside a process that was created using Popen does nothing在使用 Popen 创建的进程中使用 Popen 不会执行任何操作
【发布时间】:2020-05-28 07:28:51
【问题描述】:

我正在尝试从另一个打开 python 脚本而不阻止使用 Popen。启动脚本打开驱动脚本,并且(使用 tkinter 按钮)驱动脚本可以打开一个辅助脚本。当我尝试在驱动程序脚本中调用 Popen 时,什么也没有发生 - 外壳非常短暂地打开然后关闭。但是,当我运行驱动程序脚本而不首先调用启动器(如__main__)时,侧脚本打开正常。

我已经发布了下面的代码,我是否遗漏了有关嵌套 Popen 调用的内容?对于可执行文件,我尝试过sys.executablepython.exepythonw.exe。没有工作。线程可能可以作为 Popen 的替代方案,但侧面脚本也使用 tkinter,所以我必须找到一种使 tkinter 线程安全的方法。

starter.py:

pid = subprocess.Popen(["pythonw.exe", "driver.py"])

driver.py:

pid = subprocess.Popen([sys.executable, "side_script.py"]

【问题讨论】:

  • “什么都不做”并不是一个真正有用的描述。检查pid 对象(除此之外:可能不是一个好名字,因为“pid”是一个具有特定含义的术语)以获取进程的状态。它退出了吗?如果是这样,退出状态是什么?它还在运行,只是没有弹出窗口吗?
  • 另外,如果这不能用两个微不足道/近乎空的脚本来重现,这意味着答案需要实际显示问题确实发生的脚本为该问题提供 aa minimal reproducible example - 对于任何人都能够测试他们的答案至关重要。
  • 感谢您的建议!解决了查看错误代码的问题。更新了原始答案以显示。
  • 很高兴听到你解决了它!使用“添加答案”按钮添加您自己的答案(稍后您将被允许接受),而不是在问题中编辑答案。

标签: python tkinter subprocess popen


【解决方案1】:

我找到了问题,幸好这是一个简单的问题。根据 Charles Duffy 的建议,我尝试使用输出查看任何错误,error = pid.communicate(),发现查找文件时出错。我使用 sys.path[0] 将代码调整为指向文件,它解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2014-11-15
    相关资源
    最近更新 更多