在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
答案 0 :(得分:0)
将输入传递到Python表达式中的最简单方法是使用callable alias函数,该函数恰好会接受类似于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())