Applescript 没有保存文件的权限
Applescript has no permissions to save file
我正在尝试编写将 .numbers
文档转换为 .csv
文档的脚本。它需要可从命令行执行,以便我可以在预提交 git 挂钩中使用它。
我已经编写了一个 AppleScript 来获取数字文件的路径并将其导出为 CSV,但实际导出不起作用,因为 "You don’t have permission. (6)"。我认为这与沙盒有关,但我不能使用 AppleScript 弹出文件选择器,因为这需要完全自动化。
如何授予我的 AppleScript 导出到该文件的权限?
on run argv
set input_file to item 1 of argv
set output_file to input_file
--strip off the .numbers extention
set delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to "."
if output_file contains "." then set output_file to (text items 1 thru -2 of output_file) as text
-- set the extension to be csv
set output_file to output_file & ".csv"
set output_file to POSIX file output_file
tell application "Numbers"
activate
tell (open input_file)
set activeDocument to it
with timeout of 3 seconds
export activeDocument as CSV to output_file
end timeout
close activeDocument saving yes
end tell
end tell
end run
完整的错误信息是
export_numbers_to_csv.scpt:604:676: execution error: Numbers got an error: The document “DisplayPlusButtonTestScripts.numbers” could not be exported as “DisplayPlusButtonTestScripts”. You don’t have permission. (6)
我的调用是 osascript export_numbers_to_csv.scpt /Users/me/Test\ Scripts/MyTests.numbers
来自工作目录 /Users/me/
.
我确实有权写入我要求脚本写入的目录。我还尝试导出到一个临时目录(通过 path to temporary items from user domain
),但得到了相同的错误消息。
如果 .csv 文件已存在于同一目录中并且与您尝试导出到的文件具有相同的名称,则权限可能会变得混乱。如果您创建了该 .csv 文件或至少 edited/opened 它在某个时候,那么您将有权导出到该名称,但如果它以前从未在您的计算机上打开过写访问权限(例如,如果您下载了),那么必要的权限就没有了。
要解决这个问题,您可以在脚本中的 'tell application "Numbers"' 块之前添加以下行:
open for access file output_file
close access file output_file
这会告诉脚本打开文件进行写访问,因为只需要打开它来获得必要的权限,它就会关闭它。
我正在尝试编写将 .numbers
文档转换为 .csv
文档的脚本。它需要可从命令行执行,以便我可以在预提交 git 挂钩中使用它。
我已经编写了一个 AppleScript 来获取数字文件的路径并将其导出为 CSV,但实际导出不起作用,因为 "You don’t have permission. (6)"。我认为这与沙盒有关,但我不能使用 AppleScript 弹出文件选择器,因为这需要完全自动化。
如何授予我的 AppleScript 导出到该文件的权限?
on run argv
set input_file to item 1 of argv
set output_file to input_file
--strip off the .numbers extention
set delims to AppleScript's text item delimiters
set AppleScript's text item delimiters to "."
if output_file contains "." then set output_file to (text items 1 thru -2 of output_file) as text
-- set the extension to be csv
set output_file to output_file & ".csv"
set output_file to POSIX file output_file
tell application "Numbers"
activate
tell (open input_file)
set activeDocument to it
with timeout of 3 seconds
export activeDocument as CSV to output_file
end timeout
close activeDocument saving yes
end tell
end tell
end run
完整的错误信息是
export_numbers_to_csv.scpt:604:676: execution error: Numbers got an error: The document “DisplayPlusButtonTestScripts.numbers” could not be exported as “DisplayPlusButtonTestScripts”. You don’t have permission. (6)
我的调用是 osascript export_numbers_to_csv.scpt /Users/me/Test\ Scripts/MyTests.numbers
来自工作目录 /Users/me/
.
我确实有权写入我要求脚本写入的目录。我还尝试导出到一个临时目录(通过 path to temporary items from user domain
),但得到了相同的错误消息。
如果 .csv 文件已存在于同一目录中并且与您尝试导出到的文件具有相同的名称,则权限可能会变得混乱。如果您创建了该 .csv 文件或至少 edited/opened 它在某个时候,那么您将有权导出到该名称,但如果它以前从未在您的计算机上打开过写访问权限(例如,如果您下载了),那么必要的权限就没有了。
要解决这个问题,您可以在脚本中的 'tell application "Numbers"' 块之前添加以下行:
open for access file output_file
close access file output_file
这会告诉脚本打开文件进行写访问,因为只需要打开它来获得必要的权限,它就会关闭它。