Показать полную графическую версию : 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. Но мне очень очень ннннннадаааааа :)
то это вот мое ПО, из которого я вызываю CMD, не отлавливает его и ничего не пишет. »
Естественно. Код возврата от curl.exe получает пакетный файл, а не Ваше неназванное стороннее ПО.
Как именно Вы вызываете интерпретатор команд из стороннего приложения? Как именно Вы вызываете curl.exe?
Но если 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%
YuS_2, нельзя же так сразу :lol:, надо постепенно, исподволь подводить к этому.
надо постепенно, исподволь подводить к этому. »
ну, человеку же очень нннннада! :)
Может там вообще напрямую можно curl.exe вызывать.
Может там вообще напрямую можно 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?
Не работает ни один из вариантов. Это не претензия, я, скорее всего, что-то делаю неправильно. »
Возможно, что это просто кривая реализация в самом 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%
Я вчера пробовал еще вот так, но у меня всегда возвращается "0". »
Так всегда будет возвращаться ноль. И, кстати, я не вижу, чтобы код возврата там обрабатывался каким-то образом.
Так что Вы хотите получить?
Я использую стороннее ПО, которое может вызывать CMD. »
Но если CURL возвращает один из EXIT CODES (например, 6), то это вот мое ПО, из которого я вызываю CMD, не отлавливает его и ничего не пишет. »
будет проще, если процитируете фрагмент документации этого стороннего ПО, где описано, как оно работает с кодами завершения
Так-то тупо можно:
curl.exe --output nul --silent --head --fail "http://www.google.com" && echo Exists || echo Not connected
Так всегда будет возвращаться ноль. »
а, да, точно! это же предыдущий 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.