Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.04.21;
Скачать: [xml.tar.bz2];

Вниз

Поток ввода в .bat-файле Windows   Найти похожие ветки 

 
lead-in   (2012-12-23 17:16) [0]

Делаю bat`ник который запускается сторонней программой, она же передаёт bat`нику на его поток ввода некоторые данные. Каким образом эти данные в bat`нике можно "принять" (например, сохранить в переменную или просто вывести на экран)?

Поясню на примере:
a.bat (имитирует стороннюю программу):
echo "test" | b.bat

b.bat (имитирует мой будущий bat`ник):
rem Далее пытаюсь вывести полученные данные на экран...
echo %0%
echo %1%
echo %STDIN%

Никакой из вариантов не помогает(


 
TUser ©   (2012-12-23 17:42) [1]

echo %1
echo %*


 
lead-in   (2012-12-23 17:46) [2]

TUser
Ничего не дает, пишет "Режим вывода команд на экран <ECHO> включён."


 
NoUser   (2012-12-23 18:04) [3]

> Никакой из вариантов не помогает( -> мало вариантов)

a.bat:
call b.bat param_1

b.bat:
@echo off
echo %0
echo %1
echo %PATH%


 
Юрий Зотов ©   (2012-12-23 18:13) [4]

Вызов:
b.bat test


 
lead-in   (2012-12-23 18:14) [5]

NoUser

Вот результат:
...>call b.bat var1
b.bat
var1
c:\program ... <тут вывод пер. PATH>


 
lead-in   (2012-12-23 18:18) [6]


> Юрий Зотов


test тогда как параметр передадится, но не поток ввода(


 
Юрий Зотов ©   (2012-12-23 18:38) [7]

> передаёт bat`нику на его поток ввода
То есть, в консоль. По дефолту она и есть поток ввода для батников.

> Каким образом эти данные в bat`нике можно "принять"
Через параметры.

a.bat
@echo off
b.bat param1 param2

b.bat
echo %1 %2


 
NoUser   (2012-12-23 18:38) [8]

> она же передаёт bat`нику на его поток ввода некоторые данные.
если Вам нужен поток можно использовать временный log.txt а в b.bat for
Но интерактива (STDIN/OUT) скорее всего не получится, ибо это bat.

http://www.rsdn.ru/article/winshell/batanyca.xml


 
lead-in   (2012-12-23 18:50) [9]


> Юрий Зотов


И всё-таки предполагаю что можно передать не только через параметры, вот цитата из описания той самой проги которая вызывает bat`ник (чтобы снять вопросы, это Subversion под Windows):

# The pre-revprop-change hook is invoked before a revision property
# is added, modified or deleted.  Subversion runs this hook by invoking
# a program (script, executable, binary, etc.) named "pre-revprop-change"
# (for which this file is a template), with the following ordered
# arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REV          (the revision being tweaked)
#   [3] USER         (the username of the person tweaking the property)
#   [4] PROPNAME     (the property being set on the revision)
#   [5] ACTION       (the property is being "A"dded, "M"odified, or "D"eleted)
#
#   [STDIN] PROPVAL  ** the new property value is passed via STDIN.
#
# <...>
# <...>
# <...>
#
# On a Windows system, you should name the hook program
# "pre-revprop-change.bat" or "pre-revprop-change.exe",
# but the basic idea is the same.



> NoUser


Да всё что гугл выдал на эту тему я по диагонали посмотрел, в том числе и эту ссылку.
Но в описании к вызывающей программы (выше) по-моему явно намекается что можно данные передавать и через поток ввода.

Да 100% что можно. иначе как тогда работает такой вызов:
dir | grep test
Ведь тоже самое здесь и происходит, grep же со своего потока ввода данные берёт.


 
Юрий Зотов ©   (2012-12-23 19:29) [10]


> Ведь тоже самое здесь и происходит,

Не совсем. Grep - это программа, а не батник.


 
Юрий Зотов ©   (2012-12-23 19:31) [11]

Программа исполняется сама, а батник исполняет cmd.


 
Anatoly Podgoretsky ©   (2012-12-23 19:49) [12]

И DIR тоже подпрограмма программы CMD


 
TUser ©   (2012-12-23 19:54) [13]

тогда так

@echo off
set /p aaa=""
echo %aaa%

G:\temp>echo 123 | aaa.bat
123


 
Юрий Зотов ©   (2012-12-23 20:05) [14]


> Anatoly Podgoretsky ©   (23.12.12 19:49) [12]

В данном случае это неважно, потому что речь идет о переопределении потока ввода.


 
NoUser   (2012-12-23 20:37) [15]

#   [STDIN] PROPVAL  ** the new property value is passed via STDIN.

> Но в описании к вызывающей программы (выше) по-моему явно намекается что можно данные передавать и через поток ввода.

Конечно можно, но bat не сможет с ними работать, а так как "** the new property value" сейчас ещё нет, то подойдёт и bat.


 
lead-in   (2012-12-23 20:53) [16]


> TUser


Непонятно как, но в случае с тестовыми bat-файлами работает)
А когда переношу на свою задачу нет (в качестве потока ввода всё время приходит строка "Режим вывода команд на экран (ECHO) включен."), а bat`ник у меня такой:

@echo off
set /p parval = ""
rem echo %parval%  >> D:\Repositories\MainDataStorage\hooks\log.txt
echo %parval% | python "D:\Repositories\MainDataStorage\hooks\pre-revprop-change-python-script.py" %1 %2 %3 %4 %5
exit /b %errorlevel%

Не заню имеет значение или нет, но видно что задача bat`ника по-сути просто запустить питоновский скрипт и передать ему всё (параметры командной строки и поток ввода) что bat`ник получил сам.


 
Styx   (2012-12-23 21:52) [17]

Если Ваш батник не должен этот входной поток как-то обрабатывать, то и забейте на него. Питон его сам получит.
А если Вы хотите сохранить его в файл - то сохраните, а потом передайте питону из файла. Типа

@echo off
setlocal
set tempfile=%date:~4%%time::=%
set tempfile=%tempfile:/=%
set tempfile=%temp%\pre-revprop-change-python-script-%tempfile:.=%.tmp
more > %tempfile%
type %tempfile% >> D:\Repositories\MainDataStorage\hooks\log.txt
type %tempfile% | python "D:\Repositories\MainDataStorage\hooks\pre-revprop-change-python-script.py" %*
set err=%errorlevel%
del /q %tempfile%
exit /b %err%


 
NoUser   (2012-12-23 22:01) [18]


> NoUser   (23.12.12 20:37) [15]
фигню сморозил.


> lead-in   (23.12.12 20:53) [16]
> Не заню имеет значение или нет

но задача bat`ника запустить python с нужными параметрами командной строки и передать ему данные через stdin.

pre-revprop-change-python-script.py
...
msg = sys.stdin.read()
...



> в качестве потока ввода всё время приходит строка "Режим
> вывода команд на экран (ECHO) включен."

ответ есть в [10].


 
lead-in   (2012-12-23 22:14) [19]


> Styx   (23.12.12 21:52) [17]
> Если Ваш батник не должен этот входной поток как-то обрабатывать,
>  то и забейте на него. Питон его сам получит.


Да, так работает)


> NoUser   (23.12.12 22:01) [18]
>
> pre-revprop-change-python-script.py
>  ...
> msg = sys.stdin.read()
> ...
>


Ага, я так и делаю.


 
NoUser   (2012-12-23 22:26) [20]


> Styx   (23.12.12 21:52) [17]
> more > %tempfile%

Спасибо, я думал, что такой возможности нет.


 
lead-in   (2012-12-23 22:32) [21]

Спасибо всем (а Styx особенно) за помощь, вопрос решён)))



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2013.04.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.004 c
2-1350003007
Вова
2012-10-12 04:50
2013.04.21
база данных на dataSet проблема с сохранением данных


15-1356193225
alexdn
2012-12-22 20:20
2013.04.21
asp.net


15-1356068940
azlk52
2012-12-21 09:49
2013.04.21
osk.exe не запускается


15-1354293250
Rouse_
2012-11-30 20:34
2013.04.21
Ну чтож, добил таки цикл статей про отладку.


9-1194462751
Babooin
2007-11-07 22:12
2013.04.21
DirectX vs OpenGL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский