【问题标题】:Alternate of subprocess.call(["open","-W", FileName]) in python on osxosx 上 python 中 subprocess.call(["open","-W", FileName]) 的替代
【发布时间】:2014-04-03 13:07:58
【问题描述】:

我通过https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/open.1.html使用mac osx和python 2.7我使用subprocess.call(["open","-W", FileName])。但在这种情况下,导致open 等到它打开的(或已经打开的)应用程序退出。因此,这是不希望的。我希望open 等待,直到特定打开的文件关闭,无论它打开的应用程序是否已退出(因此可能有以前打开的文件保留在该特定应用程序中) 我也在Blocking call while opening a file in python on osx 中问过,但没有得到想要的答案

【问题讨论】:

标签: python macos applescript subprocess


【解决方案1】:

只需使用:

handle = subprocess.Popen(['open', '-W', filename])

...开始你的一天;这将启动子进程,但不会阻止其退出。如果您想检查进程的状态,您仍然拥有handle。 (为了防止垃圾回收,可能需要存储此句柄)。

如果您需要处理已打开的编辑器实例处理文件的情况 - 并强制阻止,直到仅关闭该预先存在的实例中的该文件 - 如果没有特定于编辑器的支持,这是不可能的。

【讨论】:

  • 假设文件是​​ abc.txt 然后 subprocess.Popen(["open","-W", FileName]) 将在 TextEdit 中打开它。然后 subprocess.Popen(["open","-W", FileName]) 正在等待 TextEdit 不强制退出。假设我打开了一个多选项卡文本编辑器并运行我的应用程序。文本文件将在我已经运行的编辑器的选项卡中打开。然后我的程序将拒绝继续,直到我关闭所有选项卡,包括那些与我的任务无关的选项卡。我想避免这种情况
  • “等到 TexEdit 不强制退出”是什么意思?
  • 无论该应用程序的其他文件如何,我都想阻止该特定文件关闭。 subprocess.Popen(['open', '-W', filename]) 将等到 TexEdit 没有从停靠位置强制退出,即杀死 TexEdit 进程
  • 啊。简单的回答——你不能。该应用程序不提供这种反馈。
  • @J.F.Sebastian,只有在编辑器在修改文件时保持打开状态。并非所有编辑都这样做;完成读取后关闭句柄并在保存时重新打开以进行写入是很常见的。
猜你喜欢
  • 2015-03-26
  • 2021-02-19
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多