【问题标题】:Using Tee-Object to output the result of a python script to both terminal and file使用 Tee-Object 将 python 脚本的结果输出到终端和文件
【发布时间】:2018-10-11 23:29:32
【问题描述】:

问题是我无法使用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 应该立即创建文件并以持续的方式写入?

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

附加:过滤输出

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

我最初的计划只是用 python 重新读取输出文件,并用我知道的语言来做。

【问题讨论】:

  • > Tee-Object -> | Tee-Object,你需要用 ForEach-Object 替换你的 foreach 循环 b/c 前者不会写入管道。
  • 嗨,谢谢你这么快。我现在有一个错误'unexpected token'in'':foreach-object($i in $db.Email){& py -2.7 gxlu.py -s $i} | Tee-Object -....
  • ForEach-Object 不是foreach 的直接替代品。 Related.

标签: python powershell output


【解决方案1】:

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

此外,将Tee-Object 移动到foreach 正文中并使用-Append 开关,或者更改脚本以使用ForEach-Object cmdlet 而不是循环语句as suggested by Ansgar Wiechers

$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

【讨论】:

  • 谢谢。我想我即将了解一些我以前从未了解过的关于 powershell 的基本知识:
  • 对象到底是什么?一些代表行或行的实际内容的变量,您如何为每个 cmdlet 计算出来? get-member 属性并不完全相同。每个帮助文件都非常糟糕!我什至不理解脚本编写人员关于它的帖子。
  • 有问题的“对象”是ForEach-Object 作为管道输入接收的任何内容 - 如果表达式 $db.StringName 产生一个数组,比如 5 个字符串,那么 ForEach-Object 脚本块将执行 5 次, $_ 每次引用管道中的当前对象。这更有意义吗?
  • 是的。感谢您抽出宝贵的时间。为了访问每个字符串的内容,我需要使用像 $_.Name 这样的对象属性,还是实际对象 $_ 是字符串?谢谢你生病检查链接。我真的很感激!
猜你喜欢
  • 1970-01-01
  • 2018-07-01
  • 2015-12-14
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多