Как указал @antont, получение Python результатов, как только они появятся на стандартном выводе, это легко сделать с помощью механизма flu sh.
Как это сделать
Я протестировал 3 способа сделать это:
Внутри Python код , передать параметр ключевого слова для печати:
print('text', flush=True)
Внутри Python код , используя явный грипп sh:
import sys
# Do this every time you want to flush
sys.stdout.flush()
При вызове Python исполняемый файл , дайте ему возможность всегда использовать flu sh:
python -u scriptName.py
(см. ниже два примера использования python -shell и child_process .
Node.js Примеры
ключевой частью этого примера является '-u'
в pythonOptions: ['-u']
, если вы уберете эту опцию, Python не будет автоматически вызывать грипп sh (если вы не используете методы 1 или 2 сверху).
let PythonShellLibrary = require('python-shell');
let {PythonShell} = PythonShellLibrary;
let shell = new PythonShell('/home/user/showRandomWithSleep.py', {
// The '-u' tells Python to flush every time
pythonOptions: ['-u']
});
shell.on('message', function(message){
window.console.log('message', message);
window.console.log(new Date())
})
Ключевой частью этого примера является '-u'
в spawn(pythonExecutable, ['-u', myPythonScript])
, если Вы удаляете эту опцию Python не будет автоматически вызывать грипп sh (если вы не используете методы 1 или 2, описанные выше).
var myPythonScript = "/home/user/showRandomWithSleep.py";
var pythonExecutable = "python";
var uint8arrayToString = function(data) {
return String.fromCharCode.apply(null, data);
};
const spawn = require('child_process').spawn;
// The '-u' tells Python to flush every time
const scriptExecution = spawn(pythonExecutable, ['-u', myPythonScript]);
scriptExecution.stdout.on('data', (data) => {
console.log(uint8arrayToString(data));
window.console.log(new Date())
});
showRandomWithSleep.py, файл python, используемый в приведенных выше примерах
from random import *
import time
for i in range(5):
print("showRandomWithSleep.py")
print(random())
print(random())
print(random())
print(random())
print(random())
print(random())
print(random())
print(random())
print(random())
print(random())
print(random())
print(random())
time.sleep(random()*5)
Примечание
Я проверил приведенные выше примеры, и результаты немного отличаются.
При использовании python -оболочка отпечатки выводится для каждой print()
строки. Однако при использовании child_process отпечатки выводятся в блоках. Я не знаю, почему это происходит.
Ссылки