【问题标题】:"No such file or directory" error when calling fc-list in python在 python 中调用 fc-list 时出现“没有这样的文件或目录”错误
【发布时间】:2015-10-18 03:30:32
【问题描述】:

我正在尝试抓取安装在当前托管服务器上的字体列表的终端窗口。我写了以下代码:

 import subprocess
 cmd = 'fc-list'
 output = subprocess.Popen(cmd, stdout=subprocess.PIPE ).communicate()[0]

但是当我调用这段代码时,会引发异常:

[Errno 2] 没有这样的文件或目录

我可以打开一个终端窗口,这很好用。我做错了什么?

【问题讨论】:

  • docs 建议传递序列而不是字符串。您可以尝试使用列表:cmd = ['fc-list'] 吗?
  • 我刚刚尝试过,同样的异常结果
  • 我在 OSX 上运行以进行开发,但托管在 Unbuntu linux 上。我发现我必须提供整个路径

标签: python terminal subprocess


【解决方案1】:

您需要提供可执行文件的绝对路径。当您打开终端窗口时,您将运行一个 shell,它将在 $PATH 中搜索以找到该程序。当您通过子进程直接运行程序时,您没有 shell 来搜索 $PATH。 (注意:可以告诉 subprocess 你确实想要一个 shell,但这通常会导致安全漏洞)

这是您想要使用的:

 import subprocess
 cmd = '/usr/local/bin/fc-list'
 output = subprocess.Popen(cmd, stdout=subprocess.PIPE ).communicate()[0]

【讨论】:

  • 是的,我刚刚发现:/opt/X11/bin/fc-list
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
相关资源
最近更新 更多