использовать python как repl (read-eval-print-loop), чтение команд из stdin - PullRequest
0 голосов
/ 14 декабря 2018

Я реализую инструмент (Java-программу), который встраивает некоторые командные интерпретаторы, такие как "bc", "sage", ....Инструмент выполняет интерпретатор в потоке, перенаправляет его стандартный ввод и стандартный вывод и записывает некоторые команды в перенаправленный стандартный ввод встроенного интерпретатора (по времени).Все нормально с "bc" и "sage" после решения обычных проблем с буферизацией.

В случае с python, похоже, что интерпретатор не читает свои команды из stdin (я проверил это с помощью простого echo 1+2 | python).

Я не нахожу , как поручить интерпретатору python читать его команды из stdin .Я прочитал много похожих вопросов, но все они пытаются прочитать data из стандартного ввода, а не команды .

Обратите внимание, что команда, отправляемая интерпретатору python, может бытьМногострочный (цикл Python "for", ...) и команды еще не доступны при запуске Python, они генерируются и отправляются интерпретатору в течение определенного времени.

Короче говоря, я хочу использовать Python какrepl (read-eval-print-loop), чтение из стандартного ввода.

1 Ответ

0 голосов
/ 14 декабря 2018

Режим python REPL предназначен для интерактивной работы и работает только при обнаружении терминала.Вы можете передавать команды в стандартный ввод, но они не выводятся автоматически, вы должны указать это.Попробуйте запустить

эхо-печать 1 + 2 |python

Это должно получить ожидаемый результат.Вы также можете написать свой код в файл, подобный этому

echo print 1 + 2> myfile
python myfile.py

Также можно использоватьбуферизует как узел fifo для передачи данных в стандартный ввод python, но python завершается после каждой строки, и вы не получаете никакого преимущества по сравнению с простым запуском «echo print 1 + 2 | python».

mkfifo a = rw MYFIFO
echo "print 1 + 2"> MYFIFO &
cat MYFIFO |python ".

Использование python ожидаемым образом, путем выполнения каждого набора кода по мере необходимости, должно работать лучше, чем держать открытый репл, и будет давать более согласованные результаты.

...