Windows平台下如何使用node.js显示系统盘符
本文地址: http://www.cnblogs.com/blackmanba/articles/windows-nodejs-show-system-letter.html或者http://forkme.info/windows-nodejs-show-system-letter/, 转载请注明源地址。
1. 概述
node.js上大部分的API说明使用的例子都是基于Linux或者Mac os系统, 对Windows系统叙述比较少(当然, 因为node.js兼容所有平台, 所以这一点其实也无伤大雅)。但是, 如果应用涉及到调用系统命令行来完成一些功能, 兼容Windows就会是比较痛苦的一件事了, 最近就遇到了这么一个问题, 在Windows平台上怎么显示系统盘符呢?这个问题如果在Linux系统和Mac os 系统下是很容易解决的, 直接使用node.js调用cd / | ls -al命令显示就可以了, 但是在Windows平台上这个问题讨论得就比较少了。下面就来说说这个问题在Windows平台下的解决方式。
2. 策略
2.1. 思路
解决Windows下用node.js显示系统盘符这个问题的方法其实和在Linux和Mac os下显示根目录文件的方法是一致的。那就是使用node.js直接调用系统命令, 不同的只是不同平台之间命令不一致罢了。node.js已经为我们提供了调用系统命令的API, 那就是child_process模块。
2.2. Windows平台命令
那么, Windows平台使用什么命令来显示系统盘符呢?答案是使用wmic命令。为了显示系统盘符, 我们采用以下命令:
wmic logicaldisk get caption
输出情况如下:

3. 实现
以下是使用node.js显示Windows平台下盘符的代码:
var exec = require('child_process').exec;
// show Windows letter
function showLetter(callback) {
exec('wmic logicaldisk get caption', function(err, stdout, stderr) {
if(err || stderr) {
console.log("root path open failed" + err + stderr);
return;
}
callback(stdout);
}
}
/**
* output:
* Caption
* C:
* D:
* E:
* F:
* G:
**/
如果你使用的Windows 7系统, 恭喜你, 代码已经能够正确运行并输出你所想要的结果。但如果你使用的是Windows xp系统, 那么就会发现一个问题, 那就是代码没有产生任何输出, 并且也没有报任何错误。o(╯□╰)o
4. Windows xp兼容问题
其实这个问题出现的主要原因就是因为wmic命令事实上是一个交互式命令, 在Windows xp下其实也能正确的执行并产生对应的输出, 不同的是在Windows xp下命令行还在等待与用户的交互, 所以没有产生任何输出。也就是说我们其实还需要自己输入ctrl+c命令来结束这个命令。
这种解决方法最大的缺点就是我们必须自己通过键盘输入来停止与命令的交互。那有没有不用让用户进行直接操控, 执行完命令就自动退出的方法呢?答案是有的。那就是使用node.js exec方法返回的Child Process对象, 调用end方法停止与用户的交互, 同时监听对象的close事件来处理返回的信息。示例代码如下:
var exec = require('child_process').exec;
// show Windows letter, to compatible Windows xp
function showLetter(callback) {
var wmicResult;
var command = exec('wmic logicaldisk get caption', function(err, stdout, stderr) {
if(err || stderr) {
console.log("root path open failed" + err + stderr);
return;
}
wmicResult = stdout;
});
command.stdin.end(); // stop the input pipe, in order to run in windows xp
command.on('close', function(code) {
console.log("wmic close:: code:" + code);
var data = wmicResult.split('\n'), result = {};
callback(result);
});
}
/**
* output:
* Caption
* C:
* D:
* E:
* F:
* G:
**/
5. 总结
本文通过使用Windows系统下的wmic命令解决显示系统盘符这个问题, 并且同时解决了Windows xp下的兼容性问题。
Windows平台下如何使用node.js显示系统盘符的更多相关文章
- windows平台 - 0基础学习node.js(一)
首先得明白node.js做什么用的: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Nod ...
- $ npm install opencv ? 你试试?! 在windows环境下,使用node.js调用opencv攻略
博主之前写过一篇文章<html5与EmguCV前后端实现——人脸识别篇>,叙述的是opencv和C#的故事.最近在公司服务器上更新了一套nodejs环境,早就听闻npm上有opencv模块 ...
- windows 10 下配置安装node.js
环境配置 node.js windows10 25.5k 次阅读 · 读完需要 6 分钟 5 在去年就自己配置安装过node.js,但是使用npm安装模块时安装成功后调用require('mo ...
- MongoDB学习总结(一) —— Windows平台下安装
> 基本概念 MongoDB是一个基于分布式文件存储的开源数据库系统,皆在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB将数据存储为一个文档,数据结构由键值key=>val ...
- Django 1.6在Windows平台下的配置
Django 1.6 在Windows平台下的配置 前言 最近两天研究了下Django1.6在Windows平台中的配置安装,服务器采用Apache.期间遇到过许多新手所遇到的各种问题,也算是一种宝贵 ...
- 在Windows平台下安装与配置Memcached及C#使用方法
1.在Windows下安装Memcached 资料来源:http://www.jb51.net/article/30334.htm 在Windows平台下安装与配置Memcached的方法,Memca ...
- Windows平台下源码分析工具
最近这段时间在阅读 RTKLIB的源代码,目前是将 pntpos.c文件的部分看完了,准备写一份文档记录下这些代码的用处.处理过程.理论公式来源.注意事项,自己还没有弄明白的地方.目前的想法是把每一个 ...
- Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- windows平台下基于VisualStudio的Clang安装和配置
LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...
随机推荐
- 统计学——Excel实现单(双)因素方差分析
笔记链接:http://www.cnblogs.com/igoslly/p/6784206.html 加载Excel“数据分析”工具包 [文件]→[选项]→[加载项]→[Excel加载项]→[转到] ...
- [转]SURF算法解析
SURF算法解析 一.积分图像 积分图像的概念是由Viola和Jones提出的.积分图像中任意一点(i,j)的值为原图像左上角到任意点(i,j)相应的对焦区域的灰度值的总和,其数学公式如图1所示 ...
- Ubuntu win8 小设备版本
Ubuntu小设备支持列表:https://wiki.ubuntu.com/Touch/Devices win8 小设备 刷ubutntu:tieba.baidu.com/p/2772275438
- Python Django中QQ邮箱授权码问题
Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...
- Swift 中实现 Promise 模式
在异步编程中,除了竟态处理.资源利用以外,另外一个难点就是流程管理.在拥有匿名函数.闭包这些特性的编程语言中,我们通常可以使用回调函数来做一个异步任务完成或失败时的处理.但当我们的业务逻辑逐渐复杂时, ...
- layui table 时间戳
, { field: , title: '时间', templet: '<div>{{ laytpl.toDateString(d) }}</div>' }, 或者 , { f ...
- nodeJs的一些常识知识
在项目目录中打开命令窗口 1. npm init 生成一个 package.json.(npm inii -y 直接生成,不用确定). 2.npm i . 下载 package.json devDep ...
- 【转】ORACLE SQL基础—DDL语言 礼记八目 2017-12-23 21:26:21
原文地址:https://www.toutiao.com/i6502733303550837261/ SQL语言分为:DDL数据定义语言,DML数据操纵语言,DCL是数据库控制语言,TC事务控制语言 ...
- A*寻路算法详解
以我个人的理解: A*寻路算法是一种启发式算法,算法的核心是三个变量f,g,h的计算.g表示 从起点 沿正在搜索的路径 到 当前点的距离,h表示从当前点到终点的距离,而f=g+h,所以f越小,则经过当 ...
- node——express实现hello world
创建文件夹,在文件夹内再创建index.js 1.package.json npm init -y 2.安装 npm install express ---save 3.index.js //入口文件 ...