Использование Tee-Object для вывода результата скрипта Python как в терминал, так и в файл - PullRequest
0 голосов
/ 02 мая 2018

Проблема в том, что я не могу записать вывод моего скрипта Python, используя Tee-Object, как для терминала, так и для файла.

У меня есть несколько файлов, содержащих строки данных. Мне нужно проверить эти данные через 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 и сделать это на языке, который я знаю.

1 Ответ

0 голосов
/ 02 мая 2018

Вам понадобится оператор конвейера |, а не оператор перенаправления >.

Кроме того, либо переместите Tee-Object в тело foreach и используйте переключатель -Append, либо измените сценарий, чтобы использовать командлет ForEach-Object вместо оператора цикла , как предложено Ансгаром Вичерсом :

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...