На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Jin X
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Лужу, паяю, ЭВМ починяю ...
    Доброго времени суток, камарады!

    Раздел, а если быть точнее, тематика - нужна и важна. Но ... имхо, как раздел, она слишком "завышена по ценности/общности". Есть предложения по некоторой модификации рубрик в сторону компактности, я озвучил это в этом сообщении.

    Антиоффтопик: вывод результатов в консоль и лог-файл одновременно

    Для *nix систем:

    ExpandedWrap disabled
      $ ./blablabla-script.sh 2>&1 | tee logfile.log

    Для Виндовс:
    Сперва создаем скрипт, например, C:\Windows\system32\pipe.js

    ExpandedWrap disabled
      while (!WScript.StdIn.AtEndOfStream) {
        var str = WScript.StdIn.ReadLine();
        WScript.StdOut.WriteLine(str);
        WScript.StdErr.WriteLine(str);
      }

    Потом запускаем нужное:
    ExpandedWrap disabled
      cmd.exe /c blablabla-cmd.cmd | cscript //B C:\Windows\system32\pipe.js 2 >> logfile.log
      Ну не умеют здесь админы ни во что кроме создания разделов. Ну нет в админке кнопок кроме "Создать раздел", что поделаешь? :-? Спасибо и на этом.

      Цитата JoeUser @
      Для Виндовс:
      :facepalm:
      ExpandedWrap disabled
        Get-FooBar | Tee-Object logfile.log
      Сообщение отредактировано: Dark Side -
        Цитата Dark Side @
        Цитата JoeUser @
        Для Виндовс:
        :facepalm:
        ExpandedWrap disabled
          Get-FooBar | Tee-Object logfile.log

        Чет не понял, чё за Tee-Object? :-?
            аааа, это с повер-шела
              Да, это идея ещё с юниксовой консоли (tee), которая работала на манер тройника для клонирования стрима. T - слева приходит, справа уходит, и "вниз" перехватывается копия для локальной обработки (тупой лог, интеллектуальный мониторинг по рулам/регекспам и т.п.).
                3 прогрессбара одновременно на PS:
                ExpandedWrap disabled
                  for($i = 0; $i -lt 5; $i++) {
                      Write-Progress -Id 1 -Activity "Цикл по `$i" -Status "`$i=$i" -PercentComplete ($i / 5 * 100)
                      for($j = 0; $j -lt 5; $j++) {
                          Write-Progress -Id 2 -Activity "Цикл по `$j" -Status "`$j=$j" -PercentComplete ($j / 5 * 100)
                          for($k = 0; $k -lt 5; $k++) {
                              Write-Progress -Id 3 -Activity "Цикл по `$k" -Status "`$k=$k" -PercentComplete ($k / 5 * 100) -SecondsRemaining (5 - $k)
                              Start-Sleep 1
                          }
                      }
                  }

                Прикреплённый файлПрикреплённый файлps.PNG (11,89 Кбайт, скачиваний: 1740)
                Как вы говорите это на CMD реализуется?
                  Цитата Dark Side @
                  3 прогрессбара одновременно на PS:


                  А можно тоже самое на каком-нибудь STM32 для дисплея LCD 1602?
                    ниипу. Да и тут Виндовые языки как-бы.

                    Добавлено
                    Хотя называть такой набор костылей как CMD языком, язык не поворачивается.
                      Цитата Dark Side @
                      ниипу. Да и тут Виндовые языки как-бы.


                      Почему только виндовые, для юниксов-линуксов тоже.

                      Цитата Dark Side @
                      Хотя называть такой набор костылей как CMD языком, язык не поворачивается.


                      Ну почему, кстати под этот дисплей вывод shell-ом сделать можно в линуксе. Там вроде просто управляешь пинами с какой-нибудь raspberry. Но вот для той же raspberry была 10-ка выложена. У меня она не пошла, ну и хрен с ней, мне винда была и не нужна. Но вывести на дисплей с помощью скрипта в винде может и можно. А с STM32 это уже сложнее, это уже надо методичку курить :)
                        Ну потому что это тупо надстройка над командной оболочкой мсдоса в винде для нежелавших трахаться с WSH. Доработок там за всё время - по пальцам пересчитать, и, вроде как, вообще больше не будет - тупо потому что есть Power Shell, который гораздо более продвинут во все стороны. CMD в винде осталась как атавизм специально для тех, кто не хочет/не может переписать свои уже давно работающие скрипты.

                        Глядя на эту тему хочется рыдать - люди придумывают решения проблем, которых уже много лет как не существует.
                        Сообщение отредактировано: Dark Side -
                          cmd по сравнению иксовым шелл ни о чем. Надо посмотреть чего там в PowerShell.
                            На вскидку:
                            ООП - например, читая директорию, ты получаешь не текст, а массив объектов FileInfo. Преобразование объектов в читабельный текст выделено в отдельный набор функций, которые в свою очередь отделены от функций самого вывода куда-либо (на консоль, в сеть и т.п.)
                            Возможность описывать функции как в нормальных языках
                            Возможность полноценно использовать пайпы с функциями.
                            Куча синтаксического сахара
                            Полноценный базовый набор функций (for, switch и т.д.)
                            Куча самых разнообразных доп. функций, в том числе для работы с сетью, WMI, виндовым планировщиком, да и всем остальным.
                            Низкоуровневые вещи вроде fopen, seek и т.п. если сильно хочется.

                            Выдрал из своих наработок пару примеров:

                            Чтение xml файла внутри zip архива без стороннего софта и создания лишних файлов - всё на потоках. На выходе - распарсенный(!) XML.
                            ExpandedWrap disabled
                              try {
                                  Add-Type -assembly "system.io.compression.filesystem"
                                  $zip = [io.compression.zipfile]::OpenRead($filename)
                                  $xml= New-Object xml
                                  $stream = $zip.GetEntry($xmlfilename).Open()
                                  $xml.Load($stream);
                                  Write-Output $xml.Data #result is here
                              }catch [Exception] {
                                  Write-Error $_.Exception.Message
                              }finally{
                                  $stream.Close()
                                  $zip.Dispose()
                              }


                            Функция, которая принимает magnet-ссылку и добавляет её в uTorrent через его веб-интерфейс (запароленный), может принимать данные через пайп (т.е. magnets | Out-uTorrent() ). Тоже никаких вызовов сторонних программ.
                            ExpandedWrap disabled
                              #.Synopsis
                              #Sent magnet urls to uTorrent via it's admin web-interface
                              function Out-uTorrent() {
                                  param(
                                      [parameter(Mandatory=$true, ValueFromPipeline=$true)]
                                      [String]$Magnet
                                  )
                                  Begin {
                                      #Gather uTorrent Web-Interface token
                                      $webHost = Get-Settings "uTorrentHost"
                                      $webUser = Get-Settings "uTorrentUser"
                                      $webPass = Get-Settings "uTorrentPass"
                                      $response = Invoke-WebRequest `
                                          -Uri "http://$webHost/gui/token.html" `
                                          -Headers @{
                                              "Authorization" = "Basic "+[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($webUser+":"+$webPass ))
                                          } `
                                          -SessionVariable "session"
                               
                                      Remove-Variable 'webUser', 'webPass' #not needed in the process block
                               
                                      if ($response.statusCode -eq 200) {
                                          $token = $response.ParsedHtml.getElementById("token").innerHtml
                                          Remove-Variable 'response'
                                      }else {
                                          Write-Error "Gathering uTorrent token failed"
                                          $false #return false before break
                                          break
                                      }
                                  }
                                  Process {
                                      #catch errors and return true/false
                                      try {
                                          (Invoke-WebRequest "http://$webHost/gui/?token=$token&action=add-url&s=$Magnet&download_dir=1&path=" -WebSession $session).StatusCode -eq 200
                                      }catch {
                                          $false
                                      }
                                  }
                              }


                            Кто мне скажет как это сделать в CMD?
                              Цитата Dark Side @
                              ООП - например, читая директорию, ты получаешь не текст, а массив объектов FileInfo. Преобразование объектов в читабельный текст выделено в отдельный набор функций, которые в свою очередь отделены от функций самого вывода куда-либо (на консоль, в сеть и т.п.)
                              Можно поспорить, что в данном случае это достаточно часто скорее недостаток, чем преимущество.
                              Цитата Dark Side @
                              Возможность описывать функции как в нормальных языках
                              Возможность полноценно использовать пайпы с функциями.
                              Куча синтаксического сахара
                              Полноценный базовый набор функций (for, switch и т.д.)
                              Куча самых разнообразных доп. функций, в том числе для работы с сетью, WMI, виндовым планировщиком, да и всем остальным.
                              Низкоуровневые вещи вроде fopen, seek и т.п. если сильно хочется.
                              Ну большую часть этого ещё sh из первых UNIX'ов умел.
                              Цитата Dark Side @
                              Кто мне скажет как это сделать в CMD?
                              Ты ещё попроси это в SUB'е CP/M-ском сделать.
                                Цитата amk @
                                Можно поспорить, что в данном случае это достаточно часто скорее недостаток, чем преимущество.
                                В каком месте возможность получить какие-то данные путём просто обращения к полям объекта вместо полового акта с grep, awk и регулярками является недостатком?

                                Цитата amk @
                                Ну большую часть этого ещё sh из первых UNIX'ов умел.
                                Что умел? Описания функций там на зачаточном уровне; пайпы с ними вообще никак; for/if/etc там есть, но пользоваться им без ежеминутного залезания в маны нереально, а в PS ты за одни секции begin/process/end в foreach запросто душу продашь; доп. функционал может быть, а может и не быть - сейчас там даже posix не всегда соблюдается, а про то, что ты без установки/написания чего-то тяжелого банально не сможешь свободно лазить внутри xml или html (как в 23-й строке второго примера выше); низкоуровневых вещей и в помине нет.

                                Цитата amk @
                                Ты ещё попроси это в SUB'е CP/M-ском сделать.
                                Опять-же мы тут за стандартные возможности винды и данный раздел говорим. Извини, но CP/M никак не относится ни к тому ни к другому.
                                Сообщение отредактировано: Dark Side -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0587 ]   [ 19 queries used ]   [ Generated: 19.03.24, 09:48 GMT ]