我试图通过NodeJS调用python脚本,它将与python'hello world'脚本一起使用,但是当该脚本使用熊猫时,我无法执行该python脚本。
numpy == 1.15.1 熊猫== 0.23.4
nodeJS
render
python:
router.get('/', (req, res) => {
const filePath = 'python/testing2.py'
const spawn = require("child_process").spawn;
const pythonProcess = spawn('python3',[filePath, '-l']);
util.log('readingin')
pythonProcess.stdout.on('data', (data) => {
const textChunk = data.toString('utf8');// buffer to string
util.log(textChunk);
res.json({'working': true, 'data': textChunk})
});
});
如果我自己运行python脚本:
import sys
from pandas import read_csv
from pandas import datetime
def parser(x):
return datetime.strptime('190'+x, '%Y-%m')
print("Output from Python")
series = read_csv('shampoo-sales.csv', header=0, parse_dates=[0], index_col=0, squeeze=True, date_parser=parser)
print (series)
sys.stdout.flush()
答案 0 :(得分:1)
始终检查从其他进程运行的命令是否使用了期望的Python相同可执行文件。常见的方法是
which python3
或
where python3
从您的外壳,或
import sys
print(sys.executable)
在您的Python脚本中。
答案 1 :(得分:0)
就我而言,我使用的是PythonShell run方法,并使用了python-shell npm软件包:
您将需要为Python Shell提供将pythonPath指向virtualenv中路径的选项:
var options = {
mode: 'text',
pythonPath: '/Users/WC/anaconda/envs/testtoday/bin/python',
pythonOptions: ['-u'], // get print results in real-time
scriptPath: '/Volumes/Transcend/NodeJSTest/PythonNodeJS',
args:
[
req.query.funds, // starting funds
req.query.size, // (initial) wager size
req.query.count, // wager count - number of wagers per sim
req.query.sims // number of simulations
]
}
ps.PythonShell.run('./d_alembert.py', options, function (err, data) {
if (err) res.send(err);
res.send(data.toString());
});
要找到virtualenv的路径,请激活它:
source activate testtoday
然后输入:
which python
您将在virtualenv中拥有的所有导入都可以在脚本中使用。