📅  最后修改于: 2023-12-03 15:22:23.608000             🧑  作者: Mango
spawn()
方法从 Node.js 运行 Python 脚本在 Node.js 中,我们可以使用子进程模块中的 spawn()
方法来运行其它命令行程序,包括 Python 脚本。
spawn()
方法spawn()
方法会返回一个新的子进程对象,可用于与子进程进行通信。这个方法接收两个参数:
const { spawn } = require('child_process');
const child = spawn('python', ['myScript.py']);
如果子进程需要接收参数,可以在第二个参数数组中将参数以字符串的形式依次列出。
比如,我们要运行名为 myScript.py
的 Python 脚本,并向该脚本传递一个参数 myArg
,可以这样:
const { spawn } = require('child_process');
const child = spawn('python', ['myScript.py', 'myArg']);
在 Python 脚本中,可以通过 sys.argv
来获取传递的参数:
import sys
print(sys.argv)
# ['myScript.py', 'myArg']
当子进程开始运行时,它会产生输出,包括标准输出和标准错误输出。我们可以通过 child.stdout
和 child.stderr
来分别捕获这两种输出流,并以事件的形式处理它们的数据。
const { spawn } = require('child_process');
const child = spawn('python', ['myScript.py']);
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
child.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
在 Python 脚本中,我们可以使用 print()
来输出数据,它们会被发送到标准输出流中。
如果子进程启动失败,会抛出一个错误。我们可以通过捕获 error
事件来处理这些错误。
const { spawn } = require('child_process');
const child = spawn('python', ['myScript.py']);
child.on('error', (error) => {
console.error(`Failed to start subprocess: ${error}`);
});
如果子进程运行过程中产生错误,可以通过捕获 close
事件来获取错误码。
const { spawn } = require('child_process');
const child = spawn('python', ['myScript.py']);
child.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});
在 Python 脚本中,我们可以使用 sys.exit(n)
来以指定的错误码退出。
在 Windows 中,.py
文件可能不会自动与 Python 解释器关联,需要在命令行中手动输入 python myScript.py
来执行 Python 脚本。
在使用 spawn()
方法运行命令时,如果需要等待子进程执行完毕后再继续执行当前代码,则需要使用 child_process.execSync()
或 child_process.exec()
方法。这两个方法都可以等待子进程执行完毕后再返回。