我在osx 10.9上使用python 2.7我想在他们的默认文件打开器中打开一个文件,如TextEdit for .txt文件,pdf opener for .pdf file等。
当文件打开时,它应该阻止,即我想打开一个文件并等待下一条指令的执行,直到文件没有关闭。我阅读了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)
打开文件,阻止通话。然后听取变化。文件关闭后,删除文件
答案 0 :(得分:0)
这是OSX的交易。它不会因为你“关闭”它而关闭应用程序。 OSX旨在加快并简化您所做的一切,除非您使用它做新的事情(打开一个打开应用程序的新文件或强行关闭它),它将离开应用程序。
你可以这样做:
from subprocess import Popen
handle = Popen('open -W ' + FileName, shell=True)
# Do some stuff
handle,terminate()
这会关闭应用程序 我真的不明白你究竟想要做什么,因为你的问题写得非常糟糕(不是说我的英语比较好)。但是如果你想等待应用程序终止,你可以这样做:
from time import sleep
while handle.poll() is None:
sleep(0.025)
# do something after TextEditor has shut down
但话又说回来,你必须强行:从Dock中巧妙地关闭应用程序,因为再次...... OSX不会因为你按下关闭按钮而关闭应用程序。
你可以做的是:
from subprocess import Popen, STDOUT, PIPE
watchdog = Popen('iosnoop -f ' + FileName, shell=True, stdout=PIPE, stderr=STDOUT)
textfile = Popen('open -W ' + FileName, shell=True)
while watchdog.poll() is None:
output = watchdog.stdout.readline()
if 'close' in output.lower():
break
textfile.terminate()
watchdog.terminate()
watchdog.stdout.close()
这会: