Импорт модуля pandas останавливает работу моего скрипта - PullRequest
3 голосов
/ 08 июля 2020

Я использую модель child_process для отправки данных в сценарий python, где я выполняю некоторые вычисления с помощью pandas, а затем отправляю их обратно в сценарий node.js: index.js. Проблема в том, что когда я импортирую модуль pandas в скрипт python, он останавливает возврат данных из моего index.js скрипта (я не знаю почему). Однако, если я просто не импортирую модуль pandas, я получаю данные, возвращенные из сценария python.

Вот как я отправляю данные в сценарий python из index.js:

const spawn = require('child_process').spawn
let result = ''

const pythonProcess = spawn('python',['./rl-commands/t1.py', a, b]); #a, b are arguments that I send through. In this case they are just som integers (2 and 2) 

Затем я обрабатываю данные в сценарии python следующим образом (имейте в виду, что я на самом деле не использую pandas здесь, потому что я просто пытаюсь сначала установить связь между двумя сценариями, но pandas по-прежнему необходимо):

import sys
import json
import random
import numpy as np
import pandas as pd

a = sys.argv[1]
b = sys.argv[2]

print(int(a) + int(b))
sys.stdout.flush()

Наконец, я извлекаю код, который я обработал в python, в свой index.js скрипт:

pythonProcess.stdout.on('data', (data) => {
    result += data.toString()
});
pythonProcess.on('close', function (code) {
    console.log("RES: ", result);
});

!!! Как объяснялось ранее, это не работает. Но если я закомментирую импорт pandas из сценария python, он работает:

import sys
import json
import random
import numpy as np
#import pandas as pd

a = sys.argv[1]
b = sys.argv[2]

print(int(a) + int(b))
sys.stdout.flush()

Я не понимаю, как удаление import pandas as pd заставляет скрипт запускаться?

1 Ответ

1 голос
/ 08 июля 2020

Поскольку он не запускается, в stderr почти наверняка записаны данные, содержащие сообщение об ошибке, поэтому я настоятельно рекомендую вам сделать что-то вроде этого в своем javascript коде:

pythonProcess.stderr.on('data', (data) => {
    console.error(data)
});

затем он выведет ошибку в сценарии python на ваш терминал javascript.

Как только вы узнаете, что происходит не так (почти наверняка модуль pandas не установлен в этой спецификации c instance) вполне возможно, что команда python не относится к версии python, которую вы ожидаете. попробуйте запустить:

spawn('python',["--version"])

или аналогичный, чтобы убедиться, что это правильная версия; возможно, вам нужно использовать 'python3' или 'python3.6' et c. в качестве исполняемого файла, чтобы указать конкретную версию c для использования вместо 'python'

...