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

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

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

    Для *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 -
                                  Цитата Dark Side @
                                  В каком месте возможность получить какие-то данные путём просто обращения к полям объекта вместо полового акта с grep, awk и регулярками является недостатком?
                                  Уже обсуждалось. И убедить кого-либо в полезности этой возможности сторонникам PS не удалось. Хочешь сделать ещё одну попытку? Возможно в случае с чтением папки это даёт преимущество, но в других-то случаях этого нет. В awk это спокойно делается без использования регулярок. И без половых извращений.
                                    Цитата amk @
                                    В awk это спокойно делается без использования регулярок
                                    не смеши, а. Если хотя-бы тот же ls чего-то просто не выводит или выводит не так, никакой awk тебе не поможет. И не важно - ls это, или списки процессов, или ответ от удалённого сервера. Да и само использование awk и прочих уже можно считать ущербностью - ты получил данные, но тебе нужно ещё и разобраться в том, что ты получил. Я уже напарывался раз на то, что мои скрипты перестали работать из-за ifconfig, который однажды просто взял и поменял формат своего вывода.

                                    Цитата amk @
                                    Хочешь сделать ещё одну попытку?
                                    Вот уж чего не надо. Я прекрасно знаю аргументацию линуксоидов: если ты хочешь что-то что в линуксе сделать сложно, значит это ты дебил и хочешь что-то не то. Проходили, спасибо.
                                      Цитата Dark Side @
                                      Да и само использование awk и прочих уже можно считать ущербностью

                                      Простите, но это уже "ступид уйндофс стайл" :lool: В "девственно-чистом" униксе полно (over 9000+) полезных утилит. Но, боюсь огорчить, практически во всех современных дистрибутах *nix'ов на 99.9% априори ставится Perl. Это не влажные фантазии - это ... случай таки де факто!!!

                                      А на Перле я смогу тебе дважды моск отформатировать, пока ты осознаешь факт начала моей попытки :lol:

                                      ЗЫ: Если слышал за *nix пару нотЪ - нефик тут симфонию пробовать начинать, ноты выучи сперва!!!

                                      Добавлено
                                      Цитата Dark Side @
                                      если ты хочешь что-то что в линуксе сделать сложно, значит это ты дебил и хочешь что-то не то. Проходили, спасибо.

                                      И это правильно! (Линупс - не единственный уникс! кстати) Все что можно сделать просто, нужно делать просто.
                                        Цитата JoeUser @
                                        Но, боюсь огорчить, практически во всех современных дистрибутах *nix'ов на 99.9% априори ставится Perl

                                        Ну, у многих есть и TCL "из коробки" - тоже своеобразный язычок, и люблю я его тоже своеобразно :)

                                        Хотя сейчас на это место упорно проталкивают Питон. Хотя из-за разрывания его в разные стороны он имеет все шансы стать "JavaScript командной строки": где-то код вообще не запустится, где-то - запустится, но отработает не так как ожидалось и т.п.
                                          В пень Питон и TCL - на парят они девелперов не разу! Кстати, Ruby на подходе... начинаю знакомиться, адово упоротый ООП.

                                          Ах да ... ваши tcl/tk ... найдите 100 актуальных пакетов на нем, из over 9000+ существующих, поговорим ...
                                          Питон-узеры в гневе? Бывает. Вы главное отступы соблюдайте! Остальное - херня.
                                            Цитата JoeUser @
                                            Но, боюсь огорчить, практически во всех современных дистрибутах *nix'ов на 99.9% априори ставится Perl. Это не влажные фантазии - это ... случай таки де факто!!!
                                            Ага, давайте расскажите гентущнику и маководу со стажем что там ставится, а что нет и сколько. Тут уже натыкался натыкался на debian-based дистрибутивы без vi в комплекте, про менее популярные вещи даже думать не хочу.

                                            Цитата JoeUser @
                                            И это правильно! (Линупс - не единственный уникс! кстати) Все что можно сделать просто, нужно делать просто.
                                            Вот только сфигали лишний парсинг текста вы называете "просто"? Получается, зачем нам сразу брать данные нужного поля у объекта, когда можно просто добавить ещё 3 команды с невнятными аббревиатурами и 2 регулярки сверху! Ну и да, регулярку в каждом дистрибутиве надо перепроверять - нельзя ж заранее угадать что нам простые команды напишут. Вдруг они по-русски, например, кумекают, а мы тут... ну в общем простота у вас тут зашкаливает, я смотрю.

                                            ЗЫ:
                                            Цитата JoeUser @
                                            В "девственно-чистом" униксе полно (over 9000+) полезных утилит
                                            Цитата Бритва Оккама, на которую сослались там же
                                            Не следует множить сущее без необходимости
                                            Тут уже просто нечего добавлять.
                                              Цитата Dark Side @
                                              Ага, давайте расскажите гентущнику и маководу

                                              Звучит не менее угрожающе, нежели: еврей-сталевар! :lool:
                                                Цитата JoeUser @
                                                Цитата Бритва Оккама, на которую сослались там же
                                                Не следует множить сущее без необходимости

                                                Бритва ДжоЮзера: Не следует строить из себе Рахметова без необходимости! :lool:

                                                Добавлено
                                                Цитата Mr.Delphist @
                                                Хотя сейчас на это место упорно проталкивают Питон.

                                                Есть такое дело. Тем не менее, наличие в системе Перла, Руби, Питона, практически с момента старта *nix системы, подчеркиваю, априори - дает не просто бонус, а просто загоняет обратно в детский сад "все ваши виндовсы". Это я вам, как сталевар-юниксовод гарантирую :lol:
                                                  Цитата JoeUser @
                                                  Тем не менее, наличие в системе Перла, Руби, Питона, практически с момента старта *nix системы
                                                  Да, да. Просто надо поставить весь софт из интернета сразу вместе с системой - и всё будет работать. Наверное. Если не забывать где там питон, где руби, а где Си с препроцессами на PHP. Юникс-вэй, согласен. Но спасибо - уж лучше детский сад.

                                                  Добавлено
                                                  Жаль только что если вам уж так приспичил руби, то под виндами внезапно он тоже есть. Только вот винда вполне нормально и без него может работать.
                                                  Сообщение отредактировано: Dark Side -
                                                    Цитата JoeUser @
                                                    Ах да ... ваши tcl/tk ... найдите 100 актуальных пакетов на нем, из over 9000+ существующих, поговорим ...

                                                    Дык я ж почему и говорю:
                                                    Цитата Mr.Delphist @
                                                    своеобразный язычок, и люблю я его тоже своеобразно


                                                    А так - да, и ООП в нём есть (два разных несовместимых пакета), и поддержка COM, и сокеты - целый автоматизатор большой legacy-софтины мы на нём запилили... Правда, tk-часть я кроме хелло-ворлдов не щупал и сказать про это что-либо не могу (кроме того что выглядит оно как героиновая манекенщица без макияжа).
                                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                    0 пользователей:


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