【问题标题】:How to save PNG clipboard contents to file on Mac如何将 PNG 剪贴板内容保存到 Mac 上的文件
【发布时间】:2017-11-06 17:25:02
【问题描述】:

因为pbpaste不适用于图像数据,我使用以下命令将剪贴板的PNG内容从终端保存到文件中(实际上,来自另一种语言的system()命令,但是该问题也出现在终端):

osascript -e "set png_data to the clipboard as «class PNGf»" \
  -e "set the_file to open for access POSIX path of \
      (POSIX file \"image.png\") with write permission" \
  -e "write png_data to the_file" \
  -e "close access the_file"

如果文件已经存在,此命令将按需要工作,覆盖其内容,但如果文件不存在,我会收到错误:

execution error: Network file permission error. (-5000)

从 AppleScript 写入新文件的正确方法是什么?有没有比这更好的从终端/系统()命令将剪贴板数据保存到文件的方法?

【问题讨论】:

  • /image.png 的路径是什么?
  • @jweaks 该命令与问题中出现的相对路径为image.png 完全相同。我从我的主目录运行命令,~
  • AppleScript 不支持相对路径。始终使用绝对路径。还要确保在覆盖之前set eof the_file to 0,否则您可能会将旧数据留在新文件的末尾。
  • @has 一旦我得到它的工作,我实际上永远不会覆盖文件,但感谢您的提示!如果您能对my comment to jweaks's answer below 有所了解,我将不胜感激!

标签: macos shell applescript


【解决方案1】:

AppleScript:

set png_data to the clipboard as «class PNGf»
set the_file to open for access POSIX path of (POSIX file "/image.png") with write permission
write png_data to the_file
close access the_file

即使在脚本编辑器中,第 2 行也出现错误,突出问题在于您对 image.png 的路径指定。您永远不会完全指定文件路径。在命令行中工作时,没有假定主文件夹的上下文。您必须指定完整路径。 您需要添加如下内容:

set posixPath to POSIX path of (path to home folder)

【讨论】:

  • 使用绝对路径确实可以解决问题。谢谢!但是,AppleScript Language Guide 声明:“没有前导斜杠的 POSIX 路径,例如“文件夹/文件”,是相对于 POSIX 工作目录解析的。这是支持的,但仅对从 shell 运行的脚本有用 - 工作directory 是 shell 中的当前目录。”是文档不正确,还是我误读了它?
  • 我还尝试将命令保存到脚本文件中,以防该文档不适用于 -e 参数,但我仍然遇到相同的错误。使用绝对路径在我使用它的上下文中可以正常工作(它并不总是在主文件夹中,但我知道“当前目录”是什么),所以我很可能明天会接受这个答案:暂时将其打开,以防您进一步了解。
  • 在我看来,如果问题出在路径上,即使文件已经存在,它仍然会发生:两种情况下的路径都是相同的。
  • 我同意这令人沮丧且不可预测。使用 open for access 创建新文件时,直接在终端中输入时也会出现相同的“绝对路径有效/相对路径无效”问题。很难说这是错误还是沙盒问题。如果您的上下文中没有完整路径,您可以先“触摸”该文件。
  • "touch" 是我的解决方法之前我打开了这个问题;)。
猜你喜欢
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多