将stdin传递给函数中调用的命令

时间:2015-07-16 13:48:41

标签: powershell

我有一个python脚本,我在函数调用中包装。该脚本为scr,函数为function scr {python (Join-Path $ENV:HOME "bin\scr") $args}。当我直接调用python时,它接受stdin很好。所以echo hello | python bin\scr有效。但是当我调用函数(echo hello | scr)时,stdin不会从管道传递到python脚本,但似乎仍然来自终端。我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

您可以使用$input自动变量,它表示您的函数的管道输入。此外,您可以使用$MyInvocation.ExpectingInput找出您的函数是否期望任何管道输入。

function scr {
    $MyArgs=(Join-Path $ENV:HOME "bin\scr"),$args
    if($MyInvocation.ExpectingInput){
        $input | python @MyArgs
    }else{
        python @MyArgs
    }
}