Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,允许开发者使用 JavaScript 编写服务器端的应用程序。Python 是一种高级编程语言,广泛应用于数据科学、机器学习、Web 开发等领域。S3(Simple Storage Service)是云存储服务,提供可扩展的对象存储。
在 Node.js 中等待 Python 脚本写入文件,然后将文件上传到 S3。
child_process
模块执行 Python 脚本Node.js 提供了 child_process
模块,可以用来执行外部命令和脚本。
const { exec } = require('child_process');
const fs = require('fs');
const AWS = require('aws-sdk');
// 执行 Python 脚本
exec('python write_file.py', (error, stdout, stderr) => {
if (error) {
console.error(`执行出错: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
// 等待文件写入完成
fs.readFile('output.txt', (err, data) => {
if (err) throw err;
// 配置 AWS SDK
const s3 = new AWS.S3({
accessKeyId: 'YOUR_ACCESS_KEY_ID',
secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
region: 'YOUR_REGION'
});
// 上传文件到 S3
const params = {
Bucket: 'YOUR_BUCKET_NAME',
Key: 'uploaded_file.txt',
Body: data
};
s3.upload(params, (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(`文件上传成功: ${data.Location}`);
});
});
});
async/await
和 Promise
为了更好地处理异步操作,可以使用 async/await
和 Promise
。
const { exec } = require('child_process');
const fs = require('fs').promises;
const AWS = require('aws-sdk');
async function executePythonScript() {
return new Promise((resolve, reject) => {
exec('python write_file.py', (error, stdout, stderr) => {
if (error) {
reject(error);
} else {
resolve(stdout);
}
});
});
}
async function uploadToS3() {
try {
await executePythonScript();
const data = await fs.readFile('output.txt');
const s3 = new AWS.S3({
accessKeyId: 'YOUR_ACCESS_KEY_ID',
secretAccess书Key: 'YOUR_SECRET_ACCESS_KEY',
region: 'YOUR_REGION'
});
const params = {
Bucket: 'YOUR_BUCKET_NAME',
Key: 'uploaded_file.txt',
Body: data
};
const result = await s3.upload(params).promise();
console.log(`文件上传成功: ${result.Location}`);
} catch (error) {
console.error(error);
}
}
uploadToS3();
通过上述方法,你可以在 Node.js 中等待 Python 脚本写入文件,然后将文件上传到 S3。
领取专属 10元无门槛券
手把手带您无忧上云