使用Tee-Object将python脚本的结果输出到终端和文件

时间:2018-05-01 22:30:02

标签: python powershell output

问题是我无法使用Tee-Object将Python脚本的输出记录到终端和文件中。

我有多个包含数据行的文件。我需要通过HTTP请求验证此数据到服务器。有8个大文件,我希望这需要一天的时间才能运行,因为我不想充斥服务器。

  1. 导入文件字符串并运行Python脚本正在向终端生成输出。完成如下:

    $db = Import-Csv C:\Users\xxxx\documents\bunnies\foo.txt
    foreach ($i in $db.StringName) {
        & py -2.7 myscript.py -option $i
    }
    

    $db是该文件。 $i是文件中的字符串(行)。脚本打印到终端。

    由于输出将持续数天,我需要知道它将被记录。输出一小时后,Tee-Object尚未创建文件。

    foreach ($i in $db.StringName) {
        & py -2.7 myscript.py -option $i
    } > Tee-Object -FilePath .../bunnyrabbit.txt
    
  2. 我假设附加的> Tee-Object -FilePath .../bunnyrabbit.txt应该立即创建文件并以持续的方式写入?

    我需要能够在程序运行时检查输出是否正常。

  3. 附加:过滤输出

    脚本的每行输出只是“x是正确的”或“x是不正确的”。如果我想将所有更正过滤到一个文件中并将其更正为另一个文件怎么去?

    我原来的计划只是在python中重新读取输出文件,并用我所知的语言进行。

1 个答案:

答案 0 :(得分:2)

您需要|管道运算符,而不是>重定向运算符。

此外,在Tee-Object正文中移动foreach并使用-Append开关,或更改脚本以使用ForEach-Object cmdlet而不是循环语句{{ 3}}:

$db = Import-Csv C:\Users\xxxx\documents\bunnies\foo.txt
foreach ($i in $db.StringName) {
    & py -2.7 myscript.py -option $i |Tee-Object -FilePath ..\bunnyrabbit.txt -Append
}

$db = Import-Csv C:\Users\xxxx\documents\bunnies\foo.txt
$db.StringName |ForEach-Object {
    & py -2.7 myscript.py -option $_ 
} |Tee-Object -FilePath ..\bunnyrabbit.txt