Делай... До тех пор пока -loop не выйдет
local $results, $h, $PID, $BlueStacks_Path
$BlueStacks_Path = @ProgramFilesDir & "\BlueStacks\"
$BlueStacks_Path = StringReplace($BlueStacks_Path, "\\", "\")
$h = Run($BlueStacks_Path & "hd-Adb connect localhost","","",$STDIO_INHERIT_PARENT)
sleep(1000)
$PID = run($BlueStacks_Path & "HD-Frontend.exe Testing")
WinGetProcess($PID)
sleep(1000)
Do
$result = run($BlueStacks_Path & "HD-Adb shell getprop sys.boot_completed", "", "", BitOR($STDIN_CHILD, $STDERR_MERGED))
$Read = StdoutRead($result)
ConsoleWrite("$Read : " & $Read & @CRLF)
sleep(1000)
until $result = 1
Интересно, почему я получаю бесконечный цикл при проверке, открыт ли BlueStacks.
Если я делаю это на основе командной строки, все работает. Но когда я помещаю его в AutoIt, он просто зацикливается, потому что ConsoleWrite()
шоу $Read
возвращает пробел, а не 1
или же device not loaded
,
Что я делаю неправильно?
1 ответ
Что я делаю неправильно?
Согласно документации - Справочник по функциям -Run()
:
Возвращаемое значение
Успех: идентификатор процесса, который был запущен.
Неудача:0
и устанавливает@error
флаг ненулевым.
ПИД вряд ли будет 1
, Если какой-либо0
значение должно выйти из цикла (в соответствии с Документация - Справочник по языку - Операторы), а затем изменить последнюю строку на любой из:
Until $result
или жеUntil $result > 0
или жеUntil Not ($result = 0)
Или используя While...WEnd
петля; пример:
Global Const $g_sFile = 'notepad.exe'
Global $g_iPID = 0
While Not $g_iPID
$g_iPID = Run($g_sFile)
WEnd
Тем не менее, большинство причин для Run()
Ошибка не может быть решена простым повторным вызовом.
Если я делаю это на основе командной строки, все работает.
Простой способ вернуть вывод STD из (отдельных) аргументов командной строки:
#include <AutoItConstants.au3>
Global Const $g_iDelay = 250
Global Const $g_sCom = @ComSpec & ' /c '
Global Const $g_aCmd = [ _
'help', _
'dir/w', _
'ping localhost' _
]
Global $g_iPID = 0
Global $g_sSTD = ''
For $i1 = 0 To UBound($g_aCmd) - 1
$g_iPID = Run($g_sCom & $g_aCmd[$i1], '', @SW_HIDE, $STDERR_MERGED)
While ProcessExists($g_iPID)
Sleep($g_iDelay)
WEnd
$g_sSTD = StdoutRead($g_iPID)
ConsoleWrite($g_sSTD & @CRLF)
Next