Jump to content
Sign in to follow this  
cuicui

New StdoutRead (weird) behaviour (v3.2.12.0)

Recommended Posts

cuicui

Hi,

I have a piece of code that gives me the address of the network gateway, see: http://www.autoitscript.com/forum/index.php?showtopic=58616

Since the new version (v3.2.12.0), i can't grab the output of the "route print" command. But if I add just a message box to display the PID, the StdoutRead function works correctly (???).

Not Working:

$route = Run(@ComSpec & " /c" & "route print", "", @SW_HIDE, 2)
$route_output=StdoutRead($route)

$gw_tmp1=StringSplit($route_output, ":")
$gw_tmp2=StringSplit($gw_tmp1[3], "=")

$gw=StringStripWS($gw_tmp2[1], 8)

MsgBox(0, "", $gw)

Working:

$route = Run(@ComSpec & " /c" & "route print", "", @SW_HIDE, 2)
MsgBox(0, "", $route)

$route_output=StdoutRead($route)
$gw_tmp1=StringSplit($route_output, ":")
$gw_tmp2=StringSplit($gw_tmp1[3], "=")

$gw=StringStripWS($gw_tmp2[1], 8)

MsgBox(0, "", $gw)

Furthermore, when I try the code example of the StdoutRead function, the same thing happens: in the While loop, the data is not present at the first iteration of StdoutRead but at the second one (???). This piece of code display a first blank message box titled "STDOUT read:", then a second one with the actual output:

While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDOUT read:", $line)
Wend

Any idea? Is this a bug?

All the best.

Share this post


Link to post
Share on other sites
weaponx

Shouldn't this:

Run(@ComSpec & " /c"....

be

Run(@ComSpec & " /c "....

Share this post


Link to post
Share on other sites
cuicui

Shouldn't this:

Run(@ComSpec & " /c"....

be

Run(@ComSpec & " /c "....

Same behavior. Stdout isn't accessible unless I print the PID f the command in a message box (!!!).

...And, NO, i don't what to use the MsgBox as a workaroud :)

Share this post


Link to post
Share on other sites
ProgAndy

The new StdOutRead doesn't block and waits for a String to read.

you have to wait yourself:

$route = Run(@ComSpec & " /c" & "route print", "", @SW_HIDE, 2)
Dim $route_output
Do 
    $route_output &= StdoutRead($route)
Until @error
$gw_tmp1=StringSplit($route_output, ":")
$gw_tmp2=StringSplit($gw_tmp1[3], "=")

$gw=StringStripWS($gw_tmp2[1], 8)

MsgBox(0, "", $gw)

*GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes

Share this post


Link to post
Share on other sites
cuicui

The new StdOutRead doesn't block and waits for a String to read.

you have to wait yourself

Thanks, that's working. I think that your solution makes more sense than the example in the documentation of the function.

All the best,

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.