Войти

Показать полную графическую версию : CMD CURL - Обработка результатов вывода


Fres Fighters
02-05-2019, 20:53
Добрый вечер всем!

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

http://images.vfl.ru/ii/1556819220/e7272783/26396085_s.png (http://vfl.ru/fotos/e727278326396085.html)

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

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

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

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

Все, что мне удалось достичь - возвращать сообщение ERROR (подсмотрел вот тут (http://forum.oszone.net/thread-194669.html)).

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

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

Iska
02-05-2019, 21:10
то это вот мое ПО, из которого я вызываю CMD, не отлавливает его и ничего не пишет. »
Естественно. Код возврата от curl.exe получает пакетный файл, а не Ваше неназванное стороннее ПО.

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

YuS_2
03-05-2019, 07:53
Но если 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
YuS_2, нельзя же так сразу :lol:, надо постепенно, исподволь подводить к этому.

YuS_2
03-05-2019, 10:59
надо постепенно, исподволь подводить к этому. »
ну, человеку же очень нннннада! :)

Iska
03-05-2019, 11:15
Может там вообще напрямую можно curl.exe вызывать.

YuS_2
03-05-2019, 12:07
Может там вообще напрямую можно curl.exe вызывать. »
Скорее даже наверняка... ведь curl - консольное приложение, а вызывать cmd или curl, разница не большая...
Но ПО секретное, суть задачи не ясна (не озвучена), поэтому вопрос-ответ и ничего более... сегодня мои способности телепата отпросились в отпуск. :)

Fres Fighters
03-05-2019, 17:22
Как именно Вы вызываете интерпретатор команд из стороннего приложения? Как именно Вы вызываете curl.exe? »
Там просто есть раздел для вызова. Ввожу туда curl -i https://www.google.com и мне приходит ответ.

Для того, чтобы Ваше ПО получало errorlevel, его нужно ему передать. »
Большое Вам спасибо за Ваш подробнейший ответ. Я так обрадовался, когда увидел решение. Но.......

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

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

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

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

Если сайта не существует с вариантом echo ERROR:
http://images.vfl.ru/ii/1556892973/e6d9dfaf/26406564_m.png (http://vfl.ru/fotos/e6d9dfaf26406564.html)

Если сайт существует:
http://images.vfl.ru/ii/1556893081/e36b8976/26406602_m.png (http://vfl.ru/fotos/e36b897626406602.html)

Ваш вариант:
http://images.vfl.ru/ii/1556893204/bc50f94f/26406643_m.png (http://vfl.ru/fotos/bc50f94f26406643.html)

Я вчера пробовал еще вот так, но у меня всегда возвращается "0".
http://images.vfl.ru/ii/1556893288/f25c60d5/26406678_m.png (http://vfl.ru/fotos/f25c60d526406678.html)

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

YuS_2
03-05-2019, 18:43
Не работает ни один из вариантов. Это не претензия, я, скорее всего, что-то делаю неправильно. »
Возможно, что это просто кривая реализация в самом 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
Я вчера пробовал еще вот так, но у меня всегда возвращается "0". »
Так всегда будет возвращаться ноль. И, кстати, я не вижу, чтобы код возврата там обрабатывался каким-то образом.

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

Busla
03-05-2019, 19:28
Я использую стороннее ПО, которое может вызывать CMD. »
Но если CURL возвращает один из EXIT CODES (например, 6), то это вот мое ПО, из которого я вызываю CMD, не отлавливает его и ничего не пишет. »
будет проще, если процитируете фрагмент документации этого стороннего ПО, где описано, как оно работает с кодами завершения

Iska
03-05-2019, 19:32
Так-то тупо можно:
curl.exe --output nul --silent --head --fail "http://www.google.com" && echo Exists || echo Not connected

YuS_2
03-05-2019, 20:17
Так всегда будет возвращаться ноль. »
а, да, точно! это же предыдущий 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
будет проще, если процитируете фрагмент документации этого стороннего ПО, где описано, как оно работает с кодами завершения

Нет у него документации. Даже по базовым командам справка не закончена.

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

Ваш код работает. На нем и остановлюсь.

Правильно так:

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

Iska (http://forum.oszone.net/member.php?userid=121960) и YuS_2 (http://forum.oszone.net/member.php?userid=532796), огромное Вам спасибо за помощь!




© OSzone.net 2001-2012