Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.161.119] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Доброго времени суток, камарады!
Раздел, а если быть точнее, тематика - нужна и важна. Но ... имхо, как раздел, она слишком "завышена по ценности/общности". Есть предложения по некоторой модификации рубрик в сторону компактности, я озвучил это в этом сообщении. Антиоффтопик: вывод результатов в консоль и лог-файл одновременно Для *nix систем: $ ./blablabla-script.sh 2>&1 | tee logfile.log Для Виндовс: Сперва создаем скрипт, например, C:\Windows\system32\pipe.js while (!WScript.StdIn.AtEndOfStream) { var str = WScript.StdIn.ReadLine(); WScript.StdOut.WriteLine(str); WScript.StdErr.WriteLine(str); } Потом запускаем нужное: cmd.exe /c blablabla-cmd.cmd | cscript //B C:\Windows\system32\pipe.js 2 >> logfile.log |
Сообщ.
#2
,
|
|
|
Цитата JoeUser @ Для Виндовс: Get-FooBar | Tee-Object logfile.log |
Сообщ.
#3
,
|
|
|
Цитата Dark Side @ Цитата JoeUser @ Для Виндовс: Get-FooBar | Tee-Object logfile.log Чет не понял, чё за Tee-Object? |
Сообщ.
#5
,
|
|
|
аааа, это с повер-шела
|
Сообщ.
#6
,
|
|
|
Да, это идея ещё с юниксовой консоли (tee), которая работала на манер тройника для клонирования стрима. T - слева приходит, справа уходит, и "вниз" перехватывается копия для локальной обработки (тупой лог, интеллектуальный мониторинг по рулам/регекспам и т.п.).
|
Сообщ.
#7
,
|
|
|
3 прогрессбара одновременно на PS:
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 Кбайт, скачиваний: 1764) Как вы говорите это на CMD реализуется? |
Сообщ.
#8
,
|
|
|
Цитата Dark Side @ 3 прогрессбара одновременно на PS: А можно тоже самое на каком-нибудь STM32 для дисплея LCD 1602? |
Сообщ.
#9
,
|
|
|
ниипу. Да и тут Виндовые языки как-бы.
Добавлено Хотя называть такой набор костылей как CMD языком, язык не поворачивается. |
Сообщ.
#10
,
|
|
|
Цитата Dark Side @ ниипу. Да и тут Виндовые языки как-бы. Почему только виндовые, для юниксов-линуксов тоже. Цитата Dark Side @ Хотя называть такой набор костылей как CMD языком, язык не поворачивается. Ну почему, кстати под этот дисплей вывод shell-ом сделать можно в линуксе. Там вроде просто управляешь пинами с какой-нибудь raspberry. Но вот для той же raspberry была 10-ка выложена. У меня она не пошла, ну и хрен с ней, мне винда была и не нужна. Но вывести на дисплей с помощью скрипта в винде может и можно. А с STM32 это уже сложнее, это уже надо методичку курить |
Сообщ.
#11
,
|
|
|
Ну потому что это тупо надстройка над командной оболочкой мсдоса в винде для нежелавших трахаться с WSH. Доработок там за всё время - по пальцам пересчитать, и, вроде как, вообще больше не будет - тупо потому что есть Power Shell, который гораздо более продвинут во все стороны. CMD в винде осталась как атавизм специально для тех, кто не хочет/не может переписать свои уже давно работающие скрипты.
Глядя на эту тему хочется рыдать - люди придумывают решения проблем, которых уже много лет как не существует. |
Сообщ.
#12
,
|
|
|
cmd по сравнению иксовым шелл ни о чем. Надо посмотреть чего там в PowerShell.
|
Сообщ.
#13
,
|
|
|
На вскидку:
ООП - например, читая директорию, ты получаешь не текст, а массив объектов FileInfo. Преобразование объектов в читабельный текст выделено в отдельный набор функций, которые в свою очередь отделены от функций самого вывода куда-либо (на консоль, в сеть и т.п.) Возможность описывать функции как в нормальных языках Возможность полноценно использовать пайпы с функциями. Куча синтаксического сахара Полноценный базовый набор функций (for, switch и т.д.) Куча самых разнообразных доп. функций, в том числе для работы с сетью, WMI, виндовым планировщиком, да и всем остальным. Низкоуровневые вещи вроде fopen, seek и т.п. если сильно хочется. Выдрал из своих наработок пару примеров: Чтение xml файла внутри zip архива без стороннего софта и создания лишних файлов - всё на потоках. На выходе - распарсенный(!) XML. 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() ). Тоже никаких вызовов сторонних программ. #.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? |
Сообщ.
#14
,
|
|
|
Цитата Dark Side @ Можно поспорить, что в данном случае это достаточно часто скорее недостаток, чем преимущество.ООП - например, читая директорию, ты получаешь не текст, а массив объектов FileInfo. Преобразование объектов в читабельный текст выделено в отдельный набор функций, которые в свою очередь отделены от функций самого вывода куда-либо (на консоль, в сеть и т.п.) Цитата Dark Side @ Ну большую часть этого ещё sh из первых UNIX'ов умел.Возможность описывать функции как в нормальных языках Возможность полноценно использовать пайпы с функциями. Куча синтаксического сахара Полноценный базовый набор функций (for, switch и т.д.) Куча самых разнообразных доп. функций, в том числе для работы с сетью, WMI, виндовым планировщиком, да и всем остальным. Низкоуровневые вещи вроде fopen, seek и т.п. если сильно хочется. Цитата Dark Side @ Ты ещё попроси это в SUB'е CP/M-ском сделать. Кто мне скажет как это сделать в CMD? |
Сообщ.
#15
,
|
|
|
Цитата amk @ В каком месте возможность получить какие-то данные путём просто обращения к полям объекта вместо полового акта с grep, awk и регулярками является недостатком?Можно поспорить, что в данном случае это достаточно часто скорее недостаток, чем преимущество. Цитата amk @ Что умел? Описания функций там на зачаточном уровне; пайпы с ними вообще никак; for/if/etc там есть, но пользоваться им без ежеминутного залезания в маны нереально, а в PS ты за одни секции begin/process/end в foreach запросто душу продашь; доп. функционал может быть, а может и не быть - сейчас там даже posix не всегда соблюдается, а про то, что ты без установки/написания чего-то тяжелого банально не сможешь свободно лазить внутри xml или html (как в 23-й строке второго примера выше); низкоуровневых вещей и в помине нет.Ну большую часть этого ещё sh из первых UNIX'ов умел. Цитата amk @ Опять-же мы тут за стандартные возможности винды и данный раздел говорим. Извини, но CP/M никак не относится ни к тому ни к другому. Ты ещё попроси это в SUB'е CP/M-ском сделать. |