Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   CMD CURL - Обработка результатов вывода (http://forum.oszone.net/showthread.php?t=340372)

Fres Fighters 02-05-2019 20:53 2870067

CMD CURL - Обработка результатов вывода
 
Добрый вечер всем!

Я очень мало знаком с CMD. Я честно гуглил, пересмотрел огромную кучу страниц, вот лишь небольшая часть истории моего браузера. Monkey-метод меня тут не выручил.



Я не могу найти ответ сам. Пожалуйста, помогите.

Я использую стороннее ПО, которое может вызывать CMD. Из этого ПО я вызываю CMD, где пишу вызов CURL, например: curl -i https://www.google.com
Мне возвращается нормальный ответ.

Но если CURL возвращает один из EXIT CODES (например, 6), то это вот мое ПО, из которого я вызываю CMD, не отлавливает его и ничего не пишет.

Мне нужен CMD, чтобы возвращался EXIT CODES, я пробовал разные варианты, перепробовал штук 30 разных, и так, и сяк, менял регистр символов, танцевал с бубном. У меня не получается.

Все, что мне удалось достичь - возвращать сообщение ERROR (подсмотрел вот тут).

curl -i https://www.google.com || echo ERROR

Постарался максимально описать свою проблему, надавил на жалость, признаю свое абсолютное незнание CMD. Но мне очень очень ннннннадаааааа :)

Iska 02-05-2019 21:10 2870069

Цитата:

Цитата Fres Fighters
то это вот мое ПО, из которого я вызываю CMD, не отлавливает его и ничего не пишет. »

Естественно. Код возврата от curl.exe получает пакетный файл, а не Ваше неназванное стороннее ПО.

Как именно Вы вызываете интерпретатор команд из стороннего приложения? Как именно Вы вызываете curl.exe?

YuS_2 03-05-2019 07:53 2870093

Цитата:

Цитата Fres Fighters
Но если CURL возвращает один из EXIT CODES (например, 6), то это вот мое ПО, из которого я вызываю CMD, не отлавливает его и ничего не пишет.
Мне нужен CMD, чтобы возвращался EXIT CODES, я пробовал разные варианты, перепробовал штук 30 разных, и так, и сяк, менял регистр символов, танцевал с бубном. У меня не получается. »

Для того, чтобы Ваше ПО получало errorlevel, его нужно ему передать.
В cmd это делается так:
run.bat
Код:

@echo off
[(команда|программа), которая изменяет errorlevel]
exit /b %errorlevel%

- здесь будет передан errorlevel программе, которая вызвала на исполнение пакетный файл.
В Вашем случае:
Код:

@echo off
curl -i https://www.google.com||(exit /b %errorlevel%)

либо так, если будут ещё какие-либо дополнительные команды, кроме самого curl:
Код:

@echo off
curl -i https://www.google.com
set "var=%errorlevel%"
rem дополнительные команды
exit /b %var%


Iska 03-05-2019 10:31 2870114

YuS_2, нельзя же так сразу :lol:, надо постепенно, исподволь подводить к этому.

YuS_2 03-05-2019 10:59 2870120

Цитата:

Цитата Iska
надо постепенно, исподволь подводить к этому. »

ну, человеку же очень нннннада! :)

Iska 03-05-2019 11:15 2870121

Может там вообще напрямую можно curl.exe вызывать.

YuS_2 03-05-2019 12:07 2870129

Цитата:

Цитата Iska
Может там вообще напрямую можно curl.exe вызывать. »

Скорее даже наверняка... ведь curl - консольное приложение, а вызывать cmd или curl, разница не большая...
Но ПО секретное, суть задачи не ясна (не озвучена), поэтому вопрос-ответ и ничего более... сегодня мои способности телепата отпросились в отпуск. :)

Fres Fighters 03-05-2019 17:22 2870204

Цитата:

Цитата Iska
Как именно Вы вызываете интерпретатор команд из стороннего приложения? Как именно Вы вызываете curl.exe? »

Там просто есть раздел для вызова. Ввожу туда curl -i https://www.google.com и мне приходит ответ.

Цитата:

Цитата YuS_2
Для того, чтобы Ваше ПО получало errorlevel, его нужно ему передать. »

Большое Вам спасибо за Ваш подробнейший ответ. Я так обрадовался, когда увидел решение. Но.......

Не работает ни один из вариантов. Это не претензия, я, скорее всего, что-то делаю неправильно.

Вот это у меня работает: curl -i https://www.google.com || echo ERROR
Возвращается ERROR, если что-то не так. Приведенные Вами варианты у меня ничего не отображают.

Цитата:

Цитата YuS_2
Но ПО секретное, суть задачи не ясна (не озвучена), поэтому вопрос-ответ и ничего более... сегодня мои способности телепата отпросились в отпуск. »

ПО не секретное. Вот скриншоты и интерфейс, если это как-то прояснит задачу. Программа называется BotChief Editor - это ПО, некоторый аналог ZennoPoster или Selenium IDE.

Если сайта не существует с вариантом echo ERROR:


Если сайт существует:


Ваш вариант:


Я вчера пробовал еще вот так, но у меня всегда возвращается "0".


Возможно, что это просто кривая реализация в самом BotChief Editor?

YuS_2 03-05-2019 18:43 2870233

Цитата:

Цитата Fres Fighters
Не работает ни один из вариантов. Это не претензия, я, скорее всего, что-то делаю неправильно. »

Цитата:

Цитата Fres Fighters
Возможно, что это просто кривая реализация в самом BotChief Editor? »

Нет, это не кривая реализация, просто curl сначала выводит поток ошибок, а его-то BotChief Editor обработать как код возврата не может.
Попробуйте так:
run.bat
Код:

@echo off
2>nul curl -i https://www.google.kk||(exit /b %errorlevel%)
cd .
curl -f -s -i https://www.google.kk
exit /b %errorlevel%

А для проверки того, что именно возвращается при выполнении пакетного сценария, можно создать проверочный "батник":
Код:

@echo off
call run.bat
echo %errorlevel%
pause

Но если BotChief Editor "не умеет" обрабатывать код возврата, то и смысла в его передаче в таком виде не будет, т.е. тогда только так:
Код:

cmd /c "2>nul curl -i https://www.google.kk||echo %errorlevel%"
curl -f -s -i https://www.google.kk
echo %errorlevel%


Iska 03-05-2019 19:28 2870251

Цитата:

Цитата Fres Fighters
Я вчера пробовал еще вот так, но у меня всегда возвращается "0". »

Так всегда будет возвращаться ноль. И, кстати, я не вижу, чтобы код возврата там обрабатывался каким-то образом.

Так что Вы хотите получить?

Busla 03-05-2019 19:28 2870252

Цитата:

Цитата Fres Fighters
Я использую стороннее ПО, которое может вызывать CMD. »

Цитата:

Цитата Fres Fighters
Но если CURL возвращает один из EXIT CODES (например, 6), то это вот мое ПО, из которого я вызываю CMD, не отлавливает его и ничего не пишет. »

будет проще, если процитируете фрагмент документации этого стороннего ПО, где описано, как оно работает с кодами завершения

Iska 03-05-2019 19:32 2870254

Так-то тупо можно:
Код:

curl.exe --output nul --silent --head --fail "http://www.google.com" && echo Exists || echo Not connected

YuS_2 03-05-2019 20:17 2870280

Цитата:

Цитата Iska
Так всегда будет возвращаться ноль. »

а, да, точно! это же предыдущий errorlevel...
Правильно так:
Код:

@echo off
setlocal enabledelayedexpansion
cd .
curl -f -s -i https://www.google.kk ||(exit /b !errorlevel!)

или так:
Код:

@echo off
cd .
curl -f -s -i https://www.google.kk
exit /b %errorlevel%


Fres Fighters 06-05-2019 09:24 2870574

Цитата:

будет проще, если процитируете фрагмент документации этого стороннего ПО, где описано, как оно работает с кодами завершения
Нет у него документации. Даже по базовым командам справка не закончена.

Цитата:

Так-то тупо можно:
Ваш код работает. На нем и остановлюсь.

Цитата:

Правильно так:
:cry: не получается) Пожалуйста, больше не мучайте себя, мне уже неловко, просто эта программа - кривая, и мне придется просто с этим смириться :)

Iska и YuS_2, огромное Вам спасибо за помощь!


Время: 01:15.

Время: 01:15.
© OSzone.net 2001-