Nodejs中调用系统命令、Shell脚本和Python脚本的方法

网络编程 2025-04-25 01:19www.168986.cn编程入门

这篇文章主要介绍了在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,它们都有着广泛的应用场景和无限的可能性。让我们一起这个技术的世界吧!在这里,你可以发现更多的乐趣和挑战!这就是技术的魅力所在!让我们继续前行!

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by