【发布时间】:2014-03-31 08:24:58
【问题描述】:
我在 osx 10.9 上使用 python 2.7 我想在它们的默认文件打开器中打开一个文件,例如用于 .txt 文件的 TextEdit、用于 .pdf 文件的 pdf 打开器等。
当文件打开时,它应该阻塞,即我想打开一个文件并等待下一条指令的执行,直到文件没有关闭。我阅读了https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/open.1.html 和How to open a file in subprocess on mac osx 并使用了subprocess.call(["open","-W", FileName])。但是在这种情况下,即使在关闭打开的文件时,我也必须从停靠位置手动强制退出文件打开器。
因此,它也会导致关闭先前打开的文件。
假设我打开了一个多选项卡文本编辑器并运行我的应用程序。然后文本文件将在我已经运行的编辑器的选项卡中打开。然后我的程序将拒绝继续,直到我关闭所有选项卡,包括那些与我的任务无关的选项卡。那么,如何解决这个问题。打开文件时,我正在线程中通过看门狗处理文件中的更改,阻塞的原因。
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class ChangeHandler(FileSystemEventHandler):
def on_any_event(self, event):
myfunction(a, FileName, selectedFileName,b)
def filemonitor(FileName,tempLocation):
while 1:
global observer
event_handler = ChangeHandler()
observer = Observer()
observer.schedule(event_handler, tempLocation, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
Thread(target=filemonitor,args=(FileName,tempLocation,)).start()
subprocess.call(["open","-W", FileName])
observer.stop()
time.sleep(2)
os.remove(FileName)
打开文件,阻塞调用。然后听变化。当文件关闭时,然后删除文件
【问题讨论】:
-
为什么不继续下一步,不管用户对打开的文件做了什么?这对我来说似乎是一个用户敌对的设计。假设我打开了一个多选项卡文本编辑器并运行您的应用程序。您的文本文件将在我已经运行的编辑器的选项卡中打开。然后,您的程序将拒绝继续,直到我关闭所有选项卡,包括与您的任务无关的选项卡。
-
是的,这就是我面临的问题。这就是我问这个问题的原因。我希望如果我通过关闭红色标记来关闭打开的文件,然后继续处理而不需要强行退出文件打开器。您清楚地了解我的问题,现在如何解决它。
标签: python macos cocoa applescript subprocess