Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 检测具有节点的系统路径上是否存在可执行文件 问题:_Windows_Node.js_Unix_Cross Platform_Npm - Fatal编程技术网

Windows 检测具有节点的系统路径上是否存在可执行文件 问题:

Windows 检测具有节点的系统路径上是否存在可执行文件 问题:,windows,node.js,unix,cross-platform,npm,Windows,Node.js,Unix,Cross Platform,Npm,是否有一种简单的方法可以使用node判断系统路径上是否有系统可执行文件?例如,如果用户在/usr/bin/python上安装了python,并且/usr/bin位于$PATH中,我如何在节点中检测到它?反过来,检测什么东西没有安装或不在路径上,即/usr/opt/local/mycustompath/python?理想情况下,希望他们的npm软件包可用 我相信这是一个快速的谷歌搜索,搜索词是正确的,但我失败了,因为在哪里,哪些是非常通用的搜索词 背景 我正在为一个节点工具进行一些开发配置,希望能

是否有一种简单的方法可以使用node判断系统路径上是否有系统可执行文件?例如,如果用户在
/usr/bin/python
上安装了python,并且
/usr/bin
位于
$PATH
中,我如何在节点中检测到它?反过来,检测什么东西没有安装或不在路径上,即
/usr/opt/local/mycustompath/python
?理想情况下,希望他们的npm软件包可用

我相信这是一个快速的谷歌搜索,搜索词是正确的,但我失败了,因为在哪里,哪些是非常通用的搜索词

背景
我正在为一个节点工具进行一些开发配置,希望能够检测path上是否已经有python(或pip)可用,如果没有,请用户告诉我们安装它或告诉我们在哪里可以找到它。我目前计划在windows机器上使用
where
,在*nix机器上使用
where
,但希望有一种跨平台的方法来实现这一点。

你必须找到一种方法,因为没有“通用”或“开箱即用”的方法

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

当然,您也可以使用实用程序
where
,但是
where
提供了更多的信息。您可以检查
哪个
在哪里
的区别

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

包已发布到npm注册表,该注册表提供以下功能:

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

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


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

为什么不尝试执行
python-V
并检查退出状态代码?这一点非常好,似乎应该有一种方法可以在不进行测试的情况下对所有可执行文件和所有文件执行此操作,有这么多npm包,例如解析“~/blah/”,似乎奇怪的是,没有人试图填补这个空白。感谢
的提示,这里是
,震惊的是,这是与node的一个空白,它似乎有一个包来处理sun下的所有其他内容。这个解决方案依赖于执行另一个外部可执行文件,即
在哪里
。例如,这在Windows上不可用。
var isPyAvailable = require('hasbin').sync('python')