Показать полную графическую версию : [решено] Как получить данные в скрипт из командной строки?
madmasles
27-11-2009, 11:41
Подскажите, пожалуйста.
Я определяю какой USB модем подключен к компу так:
$mod=Run(@ComSpec&' /c devcon hwids USB\VID_0915*&pause', '', @SW_SHOW)
Выводится окно ком. строки, на котором есть все нужные мне данные. Но как их прочитать для дальнейшего использования? Перелопатил справку, вроде есть функция StdoutRead(), но она у меня ничего не читает. Я пробовал так:
$mod=Run(@ComSpec&' /c devcon hwids USB\VID_0915*&pause', '', @SW_SHOW)
$mode=StdoutRead($mod)
FileWrite("Log.txt", $mode&@LF)
Но так в файл Log.txt ничего не записывает. Что я неправильно делаю?
PS
"pause" и "@SW_SHOW" временно, чтобы видеть, что происходит.
Перелопатил справку, вроде есть функция StdoutRead(), но она у меня ничего не читает. »
А что в справке к этой функций написано? разве там нет примера использования?
#include <Constants.au3>
$iDevCon_PID = Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@ComSpec (http://www.autoitscript.com/autoit3/docs/macros.htm#@ComSpec) & ' /c devcon hwids USB\VID_0915* & pause', '', @SW_SHOW (http://www.autoitscript.com/autoit3/docs/macros.htm#@SW_SHOW), $STDERR_CHILD + $STDOUT_CHILD)
$sStdOutRead = ""
$sStdErrRead = ""
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$sStdOutRead &= StdoutRead (http://www.autoitscript.com/autoit3/docs/functions/StdoutRead.htm)($iDevCon_PID)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$sStdErrRead &= StderrRead (http://www.autoitscript.com/autoit3/docs/functions/StderrRead.htm)($iDevCon_PID)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'StdoutRead', $sStdOutRead)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'StderrRead', $sStdErrRead)
FileWriteLine (http://www.autoitscript.com/autoit3/docs/functions/FileWriteLine.htm)("Log.txt", $sStdOutRead)
madmasles,
а что требуется? просто записать в файл? тогда можно перенаправить поток на файл. типа так
Run(@ComSpec&' /c devcon hwids USB\VID_0915 > d:\1.txt') ; Тогда все содержимое консоли будет в файла d:\1.txt (правда могут быть глюки с кодировкой, если винда русская)
Если же, необходимо держать в памяти определенные параметры, для дальнейшего использования, то надо считать с консоли средствами AutoIt
#include <Constants.au3>
$mod=Run(@ComSpec&' /c devcon hwids USB\VID_0915', '', @SW_HIDE, $STDOUT_CHILD); Последний параметр определяет, что нужно мониторить STDOUT
While 1
$line = StdoutRead($mod)
If @error Then ExitLoop
Wend
FileWrite("Log.txt", $line & @CRLF)
тут основной акцент не на то, что получаем тоже самое - содержимое консоли в файле, а то, что правильно считываем саму консоль, а что делать дальше - на твое усмотрение. пиши файл, парси строку, передавай функции. вобщем, что хочешь :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC