У меня есть список, содержащий целые числа, и вы хотите направить его на команду оболочки, которая создает из нее гистограмму (см. here).Python - целые числа в качестве входных данных для подпроцесса.Popen
В настоящем время, давайте подражать генераторную гистограмму сценария с помощью простого скрипта echo_script.sh
оболочки, который повторяет все входной:
#/bin/sh
echo [email protected]
Изнутри Python, я хотел бы, чтобы направить содержимое списка этой команде , Я предполагаю, что это связано с некоторыми попытками с subprocess
.
numbers = [1, 2, 3]
# subprocess stuff, writing numbers to stdin of echo_script.sh process?
Я хотел бы иметь следующий вывод на стандартный вывод:
1 2 3
Следует заметить, что я в курсе решений, которые включают хранение содержимого списка во временном файле и трубопроводах этого файл echo_script.sh
, Я бы хотел этого избежать.
EDIT: Сценарий histogram.py, с которым я работаю, не поддерживает чтение в произвольном количестве добавленных аргументов, например echo 1 2 3
. Он читается только с stdin
. Следовательно, приведенный выше пример вводит в заблуждение. Подход, который я постарался:
proc = subprocess.Popen(["wc", "-l"], stdin=subprocess.PIPE)
proc.stdin.write(bytes([42]))
Это выводит 1, который является правильным количеством строк, но фактически количеством записанных байтов. Поэтому у меня есть еще два вопроса:
- Как правильно использовать массив байтов для отправки в
proc.stdin.write
? - Как я могу перенаправить stdout proc на текущий процесс?
Этот подход полезен для примера «echo». Однако он работает не с данным сценарием. Я отредактировал мой вопрос. Спасибо за вашу помощь! Я был бы счастлив, если бы у вас был другой взгляд. – pylipp
Ваше редактирование поставит меня на правильный путь, спасибо! Я применил некоторые изменения: я присоединил числа, используя символ новой строки. 'proc.std.write()' требует байтового объекта, поэтому я конвертирую 'numbers_str' через' bytearray (numbers_str, 'utf-8') '. То же самое касается вывода 'read', поэтому я помещаю' .decode() '. – pylipp