所以我能够运行一个python脚本,但是我很难让python脚本保存文件。直接从终端运行python脚本是有效的,但是当产生一个节点进程时它似乎无声地失败(文件永远不会保存,因此节点脚本失败)。这可能是权限或位置问题,因为直接运行python脚本有效吗?
我一直在使用python-shell来简化这个过程。我当前的API端点是这样的:
Save
我已经使用router.get('/patientsExport', (req, res) => {
const options = {
mode: 'text',
scriptPath: __dirname,
};
PythonShell.run('patientsExport.py', options, err => {
if (err) {
logger.error(err);
throw err;
}
const filePath = path.join(__dirname, 'patientsExport.xlsx');
fs.exists(filePath, exists => {
if (exists) {
// Deliver the file
} else {
res.writeHead(400, { 'Content-Type': 'text/plain' });
res.end('ERROR File does NOT Exists');
}
});
});
});
在python中检查了脚本的位置,并尝试运行os.getcwd()
命令以确保在保存文件和Node找到它之间有足够的时间,但是徒劳无功。
sleep
有没有人有这方面的经验或知道我做错了什么?
答案 0 :(得分:0)
原来这是一个位置问题。文件被保存到NodeJS脚本的根目录。我设法通过将__dirname
从节点传递到python脚本并更改当前工作目录来绕过这个问题:
使用Javascript:
const options = {
mode: 'text',
scriptPath: __dirname,
args: [__dirname],
};
PythonShell.run('patientsExport.py', options, err => ...
的Python:
import sys
from os import chdir
chdir(sys.argv[1]) if sys.argv[1] else sys.exit()