【问题标题】:Detect if executable exists on system path with node使用节点检测系统路径上是否存在可执行文件
【发布时间】:2014-09-29 00:28:55
【问题描述】:

问题

有没有一种简单的方法可以使用节点来判断系统路径上是否有可用的系统可执行文件?例如,如果用户在/usr/bin/python 安装了 python,而/usr/bin$PATH 中,我如何在 Node 中检测到它?相反地​​检测什么时候没有安装或者不在路径上,即/usr/opt/local/mycustompath/python?理想情况下希望他们是一个可用的 npm 包......

我确信这是一个使用正确搜索词的快速谷歌搜索,但我失败了,因为 where 和 which 是非常通用的搜索词。

背景

我正在为节点工具进行一些开发配置,并希望能够检测路径上是否已经有 python(或 pip),如果没有,请用户告诉安装它或告诉我们在哪里找到它。我目前正计划在 Windows 机器上使用 where 和在 *nix 机器上使用 which 来执行此操作,但希望可能有一个单一的跨平台方式来执行此操作。

【问题讨论】:

  • 为什么不直接尝试执行python -V 并检查退出状态码?
  • 绝对是好点,似乎应该有一种方法可以对所有可执行文件和所有文件执行此操作而无需测试,那里有很多 npm 包,即解析'~/blah/',似乎很奇怪,没有人试图填补这一空白

标签: windows node.js unix cross-platform npm


【解决方案1】:

hasbin 已发布到提供此功能的 npm 注册表:

使用npm install hasbin 安装它(作为项目的一部分)

要测试Python的可用性,请按如下方式使用(不要在可执行文件名后附加.exe):

var isPyAvailable = require('hasbin').sync('python')

该软件包还有其他各种有用的方法,例如能够在多个中找到第一个可用的二进制文件 - 请参阅its GitHub repository

【讨论】:

    【解决方案2】:

    您必须找到一种方法来做到这一点,因为没有“通用”或“开箱即用”的方法来做到这一点。

    一种方法是,您可以使用检查是否通过包管理器安装了所需的包/二进制文件,然后您可以使用utility whereis 尝试在标准 Linux 位置列表中找到所需的程序,在$PATH.

    当然,您也可以使用实用程序which,但whereis 提供了更多信息。可以查看whichwhereishere的区别。

    一般而言,如您的示例所示,用户可能已在某个随机位置手动安装了某些软件包,但未在 $PATH 中列出。 这样就没有办法检查软件包是否安装了,而是尝试在文件系统的完整树中查找二进制名称或相关文件。

    【讨论】:

    • 感谢whereis 的提示,震惊了这是与节点的差距,它似乎有一个包可以容纳阳光下的所有其他东西
    • 此解决方案依赖于执行另一个外部可执行文件,即whereis。例如,这在 Windows 上不可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2018-08-01
    • 2012-06-29
    • 2019-02-10
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多