如何在mac osx上的子进程中打开文件

时间:2013-10-30 17:12:35

标签: python macos applescript subprocess popen

我想打开一个文件并等待下一条指令的执行,直到文件没有关闭。我按照链接How to open a file on mac OSX 10.8.2 in python python但它没有用。

subprocess.call(['open','-W',FileName])在texteditor中打开文件,但只有当文本编辑器从dock退出时才执行下一个语句,即使我关闭了打开的文件。也就是说,它应该只在文件关闭时执行下一个语句,然后短信应该从码头自动退出 我也尝试过Popen,但它没有用

ss=subprocess.Popen("~/Downloads/DeletingDocs.txt",shell=True)
ss.communicate()   

请为它提出一些方法

2 个答案:

答案 0 :(得分:1)

关闭文件不会结束此过程,因为当您关闭文件时,您将看到编辑器仍在屏幕顶部运行。

按“Cmd + Q”退出该过程。

由于您似乎无法让用户区分关闭文档和关闭应用程序,因此我只能提出一些非常糟糕的建议。你能开始另一个使用Applescript等待“textedit”启动的后台进程,然后向“textedit”询问它已打开的文档列表。如果有一些,请睡几秒钟,然后再次检查。如果没有,它可以告诉“textedit”退出并退出。

执行此操作的Applescript看起来像这样。

tell app "TextEdit" to get documents

您可能需要使用“osascript”来让Python执行Applescript。

答案 1 :(得分:1)

尝试将其另存为“EditOneAndQuit”,然后执行:

chmod +x EditOneAndQuit

然后从Python开始:

#!/bin/bash
# Start textedit in background
open "$1" &

# Wait till textedit has zero documents open
while true
do
sleep 1
docs=`osascript -e 'tell application "textedit" to get documents'`
if [ -z "$docs" ]; then
    # Kill off poor old textedit
    osascript -e 'tell application "textedit" to quit'
exit
fi
done

首先通过创建文档并对其进行编辑来从shell中尝试:

ls > fred.txt
./OpenOneAndQuit fred.txt

当您通过单击红色按钮关闭文档时,您应该看到脚本以及textedit退出。