从节点运行python脚本并保存文件

时间:2017-07-13 11:05:38

标签: python node.js shell save

所以我能够运行一个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

有没有人有这方面的经验或知道我做错了什么?

1 个答案:

答案 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()