Nodejs中调用系统命令、Shell脚本和Python脚本的方法
这篇文章主要介绍了在Node.js中如何调用系统命令、Shell脚本和Python脚本。通过子进程,我们可以轻松地调用系统命令、执行Shell脚本和调用Python脚本。下面,我将通过具体的实例,为大家展示这些操作的方法和流程。
我们来了解一下Node.js中的子进程。子进程是Node.js中用于与系统交互的重要接口。它提供了多种API,包括标准输入、标准输出和标准错误输出的接口。通过这些接口,我们可以获取子进程的输入、输出和错误信息,以及子进程的PID。
接下来,让我们通过实例来感受一下子进程的使用。
一、利用子进程调用系统命令
我们可以使用Node.js的子进程来调用系统命令。例如,我们可以使用以下代码来获取系统的内存使用情况:
```javascript
var spawn = require('child_process').spawn;
var free = spawn('free', ['-m']);
// 捕获标准输出并将其打印到控制台
free.stdout.on('data', function (data) {
console.log('standard output:' + data);
});
// 捕获标准错误输出并将其打印到控制台
free.stderr.on('data', function (data) {
console.log('standard error output:' + data);
});
// 注册子进程关闭事件
free.on('exit', function (code, signal) {
console.log('child process exit, exit code: ' + code);
});
```
运行上述脚本后,你将看到与系统直接运行命令`free -m`相同的结果。
二、执行系统命令(child_process.exec())
除了使用子进程来调用系统命令外,我们还可以使用`child_process.exec()`方法来执行系统命令。这个方法相对更简单,适用于一些简单的命令执行。例如,你可以使用以下代码来查询天气信息:
```javascript
const { exec } = require('child_process');
const command = 'curl 天气接口返回json格式的数据'; // 这里替换为你的天气查询命令
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`执行错误: ${error}`);
return;
}
console.log(`天气信息: ${stdout}`); // 打印天气信息到控制台
});
```
Node.js中的cmd_exec.js:执行Shell命令的优雅方式
在Node.js中,我们可以使用child_process模块的exec函数来执行Shell命令。下面是一个简单的示例,名为cmd_exec.js。
代码示例:
```javascript
const { exec } = require('child_process');
const cmdStr = 'curl
exec(cmdStr, (err, stdout, stderr) => {
if (err) {
console.log('获取天气API出错:', stderr);
} else {
// stdout的内容就是我们通过curl获取的数据
// 示例数据
// {"weatherinfo":{"city":"北京","cityid":"101010100","temp":"3","WD":"西北风","WS":"3级","SD":"23%","WSE":"3","time":"21:20","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暂无实况","qy":"1019"}}
const data = JSON.parse(stdout);
console.log(data);
}
});
```
在实际运行中,你会发现直接通过curl命令获取的数据和通过运行上述Node.js脚本得到的结果是完全一样的。
接下来,我们将如何使用Node.js调用带有传参的shell脚本,这里我们主要使用child_process模块的execFile函数。你需要准备一个shell脚本,比如用于修改服务器密码的change_password.sh。
代码示例(change_password.sh):
```bash
!/bin/sh
IP=""
NAME=""
PASSWORD=""
NEWPASSWORD=""
while getopts "H:U:P:N:" arg; do 选项后面的冒号表示该选项需要参数
case $arg in
H)
IP=$OPTARG
;;
U)
NAME=$OPTARG
;;
P)
PASSWORD=$OPTARG
;;
N)
NEWPASSWORD=$OPTARG
;;
) 当有不认识的选项的时候arg为?
echo "含有未知参数"
exit 1
;;
esac
done
先获取userid
USERID=`/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD user list | grep root | awk '{print $1}'`
echo $USERID 这里可以打印出来看看获取的userid是否正确
根据userid来修改密码
/usr/bin/ipmitool -I lanplus -H $IP -U $NAME -P $PASSWORD user set password $USERID $NEWPASSWORD
```
然后,你可以通过Node.js的file_changepwd.js文件来调用这个shell脚本。以下是代码示例:
代码示例(file_changepwd.js):
```javascript
const callfile = require('child_process');
const ip = '1.1.1.1';
const username = 'test';
const password = 'pwd';
const newpassword = 'newpwd';
callfile.execFile('change_password.sh', ['-H', ip, '-U', username, '-P', password, '-N', newpassword], (err, stdout, stderr) => {
callback(err, stdout, stderr);
});
Python脚本的奥秘,其实就像解开一个谜团,一旦揭开面纱,其执行命令的本质便一目了然。掌握了调用Python脚本的技巧,便掌握了执行命令的关键。今天,让我们深入了解如何调用带有参数的Python脚本。
让我们来看一个Python脚本的示例。这个脚本通过模块sys获取参数。参数的个数可以通过len(sys.argv)来获取,而脚本名则对应sys.argv[0]。其他参数则依次排列在sys.argv中。这是一个基本的Python脚本,它展示了如何获取和使用命令行参数。这个脚本对于理解Python传参非常有帮助。
接下来,我们将通过一个Node.js文件来调用这个Python脚本。我们将使用child_process模块的exec函数来执行Python脚本并传递参数。我们将传递两个参数arg1和arg2给Python脚本py_test.py。这个Node.js脚本展示了如何在JavaScript中调用Python脚本并传递参数。如果Python脚本输出了一些内容,我们将在控制台中看到这些内容;如果出现错误,我们也将在控制台中看到错误信息。这是一个非常实用的技术,可以帮助我们在不同的编程语言之间建立桥梁。
Python脚本py_test.py的内容非常简单,它只是打印出接收到的所有参数。当我们在Node.js文件中调用这个脚本并传递参数时,我们可以看到这些参数是如何被打印出来的。这是一个非常直观的过程,让我们更好地理解如何在Python脚本中接收和使用参数。我要说的是这个过程非常有趣且实用,我很享受写这篇博客的过程。我希望这篇博客能对你有所帮助,让你也能感受到技术的魅力。技术世界的大门已经敞开,让我们一起吧!这是一种强大的技能,无论是对个人还是团队都有巨大的价值。掌握它,你将能够创造出无限可能。让我们一起迎接未来的挑战吧!
调用Python脚本并传递参数是一种非常实用的技术。通过这个过程,我们可以将不同的编程语言连接起来,实现更强大的功能。无论是Python还是JavaScript,它们都有着广泛的应用场景和无限的可能性。让我们一起这个技术的世界吧!在这里,你可以发现更多的乐趣和挑战!这就是技术的魅力所在!让我们继续前行!
编程语言
- Nodejs中调用系统命令、Shell脚本和Python脚本的方法
- asp.net mvc4 mysql制作简单分页组件(部分视图)
- 浅析GridView中显示时间日期格式的问题
- 详解nodejs 文本操作模块-fs模块(五)
- 前端插件之Bootstrap Dual Listbox使用教程
- 基于JavaScript实现瀑布流效果
- jsp实现购物程序
- js实现的黑背景灰色二级导航菜单效果代码
- Zend Framework入门教程之Zend_Registry组件用法详解
- vue中选项卡点击切换且能滑动切换功能的实现代
- sqlserver中在指定数据库的所有表的所有列中搜索
- jquery常用函数与方法汇总
- PHP内置过滤器FILTER使用实例
- CodeIgniter配置之SESSION用法实例分析
- JS实现星星评分功能实例代码(两种方法)
- 一个简单的文件MD5码自动计算比较器(附源码)