Что нового

Данные, строки Plink получить приветствие.[Решена]

All2khoff

Продвинутый
Сообщения
347
Репутация
65
Здравствуйте, есть задача, при подключении на рабочую станцию с Linux получить "приветствие" операционной системы.
и уже отталкиваясь от того какая операционная система стоит ubuntu или debian будет выполнятся определенные команды.
вариант 1
Код:
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-201-generic i686)
вариант 2
Код:
Linux yozh 4.19.0-10-686-pae #1 SMP Debian 4.19.132-1 (2020-07-24) i686
собственно само подключение и отправка команд я делать научился.
пытался с помощью StderrRead и StdoutRead , но никак не могу получить ответ.
 
Автор
All2khoff

All2khoff

Продвинутый
Сообщения
347
Репутация
65
так, но видимо я что-то упустил.
Код:
$command = Run("C:\Program Files (x86)\PuTTY\plink.exe -ssh -pw "&$password&" "& $host &" -l "&$user, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Sleep(15000)
ConsoleWrite("тестируем чтение"&@CRLF)
$data = StderrRead ($command,20)
$data2 = StdoutRead ($command,20)
ConsoleWrite($data & "попытка раз"&@CRLF)
ConsoleWrite($data2 & "попытка два"&@CRLF)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
видимо я что-то упустил
Да, этап чтения справки.
Код:
;Вариант 1 (ожидаем полное завершение процесса)
$iPID = Run("C:\Program Files (x86)\PuTTY\plink.exe -ssh -pw " & $password & " " & $host & " -l " & $user, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
ProcessWaitClose($iPID)
ConsoleWrite(StdoutRead($iPID) & @CRLF)

;Вариант 2 (пока процесс активен читаем данные)
$iPID = Run("C:\Program Files (x86)\PuTTY\plink.exe -ssh -pw " & $password & " " & $host & " -l " & $user, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

$sRead = ''

While ProcessExists($iPID)
    $sStdOut = StdoutRead($iPID)
    If @error Then ExitLoop
    
    If $sStdOut Then
        $sRead &= $sStdOut
        ConsoleWrite($sStdOut & @CRLF)
    EndIf
WEnd
 
Автор
All2khoff

All2khoff

Продвинутый
Сообщения
347
Репутация
65
Так моя ошибка в том, что я исключил цикл во время чтения потока?
Думал будет достаточно довольно продолжительной паузы перед чтением, а вон оно как. Завтра попробую.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ошибка в том, что я исключил цикл во время чтения потока?
Не так цикл, как ожидание завершения процесса.
Плюс неверное использование функции StderrRead/StdoutRead, там второй параметр почему то 20, это откуда?
 
Автор
All2khoff

All2khoff

Продвинутый
Сообщения
347
Репутация
65
там второй параметр почему то 20
из оффлайн справки с офф сайта.

Функция StdoutRead
Прочесть указанное число символов из STDOUT потока ранее запущенного дочернего процесса.

StdoutRead ( process_id[, count[, peek = false]] )

Параметры

process_idИдентификатор дочернего процесса ID, полученный после вызова Run.
countКоличество символов.
peekЕсли true, то прочтенные символы из канала не удаляются.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Автор
All2khoff

All2khoff

Продвинутый
Сообщения
347
Репутация
65
о версия AutoIt устарела.
Да это я видел, но не сталкивался еще с разночтением функционала, отныне буду проверять.
при нажатии на функцию в коде
пользуюсь онлайн справкой, но когда не всегда есть доступ к сети, потому верил оффлайн-справке.

как итог, у меня получилось получить "ответ-приветствие", всех благодарю.
 
Верх