LINUX.ORG.RU

Не работает конвейер в bash.

 ,


1

1

Есть скрипт на python:

#!/bin/env python

import sys

print(sys.argv[1])

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

[d@d-pc ~]$ xclip -o | ~/myscript.py
Traceback (most recent call last):
  File "/home/d/myscript.py", line 5, in <module>
    print(sys.argv[1])
IndexError: list index out of range

Однако конвейер прекрасно работает если данные отдаются во встроенную bash команду (не знаю как корректно сказать, но думаю вы поняли).

Как это понимать?

Пайп предаёт данные в stdin приложения. В твоём случае в коде должно быть что-то вроде

import sys

for line in sys.stdin:
    print(line)

Если хочешь передавать вывод команды как аргументы, нужно использовать что-то вроде такого: ~/myscript.py "$(xclip -o)" или xclip -o | xargs ~/myscript.py (но в этом случае аргументы будут разбиты по пробелам)

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