在xonsh中,如何从管道接收到python表达式?

时间:2018-11-02 13:01:03

标签: python bash xonsh

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 :(得分: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())