【问题标题】:Modify Python Script to Batch Convert all "WOFF" Files in Directory修改 Python 脚本以批量转换目录中的所有“WOFF”文件
【发布时间】:2016-03-15 02:21:34
【问题描述】:

我一直在使用 GitHub 用户 @hanikesn(见下文)的一个很棒的开源 python 脚本,它通过命令行(Mac OS X 上的终端)将单个 WOFF 文件转换回 OTF 格式。

就像现在一样,我将脚本拖放到终端,然后将 WOFF 文件拖放到终端,按 Enter,脚本会在同一目录中创建一个 OTF。该脚本可以手动调用,但我发现拖放要容易得多,也快得多。然而,作为一名印刷师,我使用大型字体系列,其中一些字体有超过 100 种样式,所以我需要一个批量转换工具。我知道网上有一些工具,但这些工具通常都有大小限制,除非你为服务付费,而且结果永远不会像这个脚本那样一致。另外,我想要一个离线工具。

我想将其修改为在目录(WOFF 文件夹)而不是单个文件上运行。理想情况下,我想将脚本拖放到终端中,然后拖放一个文件夹。该脚本应该只尝试转换扩展名为 .woff 的文件。

当我询问脚本的创建者时,他说“这可以通过简单的一行 shell 脚本轻松完成:

for file in *.woff; do woff2otf.py $file; done

但是我不知道如何实现这一点。我不是程序员,但我不得不在我的排版项目中使用一些基本的 python 脚本。所以,请像我 5 岁一样向我解释。

woff2otf.py

【问题讨论】:

  • 只需打开终端,输入cd /path/to/your/directory,然后将shell命令粘贴到那里。就是这样。
  • 好的,但是我应该将 python 脚本放在哪里,以便使用该 shell 命令找到它?当你说“粘贴那个shell命令时,你的意思是”for file in *.woff;做 woff2otf.py $file;完成”(不带引号)对吗?
  • 我尝试了你所说的,但我不断收到此错误消息:zsh: parse error near `done' - 我认为这是由于输入了额外的空格或未能输入...但没有无论我尝试什么,我都会不断收到不同的解析错误......就像我说的那样;我不是程序员,像我 5 岁一样解释它
  • @baldr 有点帮助?​​
  • 把'shell script'的内容放到文件里,然后把这个文件放到你的文件夹里。然后使用bash yourscriptname 运行它。文件woff2otf.py 应位于同一路径中。您可以稍微修改一下这个脚本 - 确保将 python 放在 do 关键字之后。

标签: python shell batch-file type-conversion opentype


【解决方案1】:

如果您想创建拖放应用程序,您可以:

  • 打开 Automator.app
  • 选择“应用程序”
  • 在左侧库中找到Filter Finder Items 操作
  • 把它拖到右边
  • 添加extenstion is woff条件
  • 在库中找到Run Shell Script 操作
  • Pass input 弹出窗口更改为作为参数
  • woff2otf.py 拖放到 echo 的位置(您将获得完整的路径名)
  • 将应用保存为woff2otf.app
  • 恭喜 - 你已经完成了你的第一个 OS X 应用程序。 :)

只需将woff 文件拖到应用程序图标中,它就会转换它们。我无法测试它,因为我还没有安装python3

最终的应用程序应如以下屏幕截图所示:

编辑: 如果您的python3 命令不在标准命令搜索$PATH 中,您必须更改该行:

  • /path/to/the/woff2otf.py "$f"
  • /path/to/your/python3 /path/to/the/woff2otf.py "$f"

我使用anyenv 安装了python3 - 例如它不会帮助你。因此我的python3是:

$ type python3
python3 is /opt/anyenv/envs/pyenv/shims/python3

所以 shell 脚本中的行(对我来说)看起来像:

/opt/anyenv/envs/pyenv/shims/python3 ~/bin/woff2otf.py "$f"

但是,你的安装肯定是不同的。

也有帮助:

【讨论】:

  • 听起来不错,但我按照您的说明和屏幕截图(字面意思)进行了操作,但是将 WOFF 文件的文件夹拖到应用程序只会显示一个对话框,上面写着 The action "Run Shell Script" encountered an error. 之后会发生同样的事情选择一组 WOFF 文件并拖动到应用程序。而且我确实安装了 python 3,因为 python 脚本本身就可以很好地工作。
  • 那么不幸的是也帮不上忙。仅出于好奇,您的 woff2otf.py 的完整路径是什么 - 例如你输入了什么代替/path/to/the/woff2otf.py
  • 我尝试了 2 个不同的路径:首先我尝试将其嵌入到应用程序本身中,就像工作流一样,但是当这不起作用时,我只是将脚本放在我的应用程序文件夹中并将路径更改为 @ 987654347@。但我不认为位置是问题,因为无论我尝试什么,它都是同样的错误。
  • 好的,刚刚安装了python3。上面的automator应用程序没有任何缺陷,并将拖动的woff文件转换为它。当然,您必须使用正确的路径。如果您的 python3 位于某个非标准位置,则必须将行 /path/to/woff2otf.py 用作:/path/to/python3 /path/to/woff2otf.py "$f"
  • 我通过终端安装了python3;所以它在一些隐藏的子目录中......你是如何安装它的?在哪里?您是否必须使用 /path/to/python3 /path/to/woff2otf.py "$f" 调用 python 3?再次感谢您的帮助。
【解决方案2】:

您正在使用zsh,不是吗?所以要循环你的 WOFF 文件,你可以这样做

for f in *.woff ; /complete/path/to/your/script.py $f

【讨论】:

  • Re: zsh 几周前,我发现了一个带有自动机的 githib repo,它安装了多个开发工具和库。其中之一一定是zsh,直到你问我才知道,我用谷歌搜索了它。我计划更多地了解这些东西,并认为它会派上用场,同时不会让我感到困惑。如果您认为安装它会妨碍我完成这篇文章的目标,我将卸载它。我以为我已经输入了完整的路径...或者你是说在路径之前直接输入单词/complete/
  • 我没有意识到 zsh 是随 os x 一起安装的,但是那个安装程序一定已经将我的 shell 从 bash 切换到 zsh。无论如何,我将其重置为默认值 (bash)
  • 在评论中您说“我不断收到此错误消息:zsh: parse error near *done*”所以我不得不认为您使用的 zsh 与执行循环的语法不同,我建议在使用zsh 时对您来说是正确的命令。 +|+|+ /complete/path/to/your/script.py 我的意思是你需要输入脚本的完整路径名。 +|+|+ 关于您应该在Terminal 中使用哪个shell... 两者都是不错的选择,但在您的情况下,我将继续使用bash,因为大多数示例接近100% 的示例,您将看到bash 示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
相关资源
最近更新 更多