В xonsh, как я могу получить из канала в выражение Python? - PullRequest
0 голосов
/ 02 ноября 2018

В оболочке xonsh как я могу получить из канала в выражение Python? Пример с командой find в качестве провайдера канала:

find $WORKON_HOME -name pyvenv.cfg -print | for p in <stdin>: $(ls -dl @(p))

for p in <stdin>: - это, очевидно, псевдокод. Чем мне его заменить?

Примечание: в bash я бы использовал такую ​​конструкцию:

... | while read p; do ... done

1 Ответ

0 голосов
/ 04 ноября 2018

Самый простой способ направить ввод в выражение Python - это использовать функцию с вызываемым псевдонимом , которая принимает объект типа stdin. Например,

def func(args, stdin=None):
    for line in stdin:
        ls -dl @(line.strip())

find $WORKON_HOME -name pyvenv.cfg -print | @(func)

Конечно, вы можете пропустить @(func), введя func в aliases,

aliases['myls'] = func
find $WORKON_HOME -name pyvenv.cfg -print | myls

Или, если все, что вы хотели сделать, это перебрать вывод find, вам даже не нужно передавать по конвейеру.

for line in !(find $WORKON_HOME -name pyvenv.cfg -print):
    ls -dl @(line.strip())
...