LINUX.ORG.RU

Перенаправить вывод из bash в python script

 ,


1

1

Добрый день, подскажите, у меня есть текстовый файл с двумя полями, разделенными : и хотелось бы их передать в скрипт на питоне через bash. Скрипт читает параметры командной строки sys.argv[1] sys.argv[2] т.е. что-то вроде

cat shit.log | awk '{split($0,z,":"); print z[1], z[2]}' | script.py
Т.е. если я правильно понимаю я вывожу в STDOUT при помощи cat, затем перенаправляю вызов на awk. Произвожу парсинг и передаю все скрипту на питухоне, но он не видит ни argv[1] ни argv[2].

(парсить питоном ничего не хочу, хочу через awk и перенаправление потоков)


Ответ на: комментарий от pylin
#!/usr/bin/python
import sys
print( sys.argv[1] )

Вроде ждет, а выводит

 print z[1], z[2]}' | ./channels.py
Traceback (most recent call last):
  File "./channels.py", line 3, in <module>
    print( sys.argv[1] )
IndexError: list index out of range

da17
() автор топика
Ответ на: комментарий от anonymous

Так, это работает, а почему мой вариант не работает и почему именно этот работает? Что не так у меня(кроме днк)?

da17
() автор топика
Ответ на: комментарий от da17

Потому что так:

echo 123 | sciprt.py
передаёт входные данные не в качестве аргументов, а в через stdin, а скрипт ищет входные параметры в аргументах.

А вот так:

echo 123 | while read INPUT ; do script.py $INPUT ; done

Сохранит выходные данные прошлой команды из stdout переданные в stdin в переменную INPUT и вызовет скрипт с аргументами из переменной $INPUT.

anonymous
()
Ответ на: комментарий от da17

stdin это stdin, параметры это параметры. Из пайпа можно читать так:

echo -e '123\n321' | python3 -c 'import sys
for line in sys.stdin:
  print(line, end="")'
entefeed ☆☆☆
()
Ответ на: комментарий от da17

Нет, stdin - это одно, а аргументы - это другое.

Аргументов может быть несколько нумерованных / именованных, а stdin - это просто поток данных.

anonymous
()

Не надо путать аргументы и потоки ввода-вывода. Либо в скрипте читаешь stdin, либо запускаешь через | xargs script.py

slovazap ★★★★★
()
Ответ на: комментарий от anonymous
python script.py `cat shit.log | awk '{split($0,z,":"); print z[1], z[2]}'`

с точностью до разделителей

MyTrooName ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.