in reply to Re: STDOUT missing on Windows, works on Unix
in thread STDOUT missing on Windows, works on Unix

This node falls below the community's threshold of quality. You may see it by logging in.
  • Comment on Re^2: STDOUT missing on Windows, works on Unix

Replies are listed 'Best First'.
Re^3: STDOUT missing on Windows, works on Unix (Solution)
by BrowserUk (Patriarch) on Dec 13, 2008 at 10:30 UTC

    Actually, I do use windows and do know a little about what's going on.

    The difference is that on *nix, you're creating a process tree like this:

    yourshell perl bugSTDOUT.pl perl bugSTDOUTb.pl perl bugSTDOUTc.pl

    Under windows it looks like this:

    cmd.exe perl bugSTDOUT.pl * cmd.exe * perl bugSTDOUTb.pl * cmd.exe perl bugSTDOUTc.pl

    I could go on to mention the pipe instance that is shared between the three marked processes; and the need to explicitly set a flag on a CreateProcess call to cause spawned process to inherit handles from its parent, but you likely wouldn't be interested.

    If you more exactly emulate the *nix handling of the situation, by suppressing the creation of those intermediary shell processes with their associated virtual consoles, thus:

    C:\test>type bug* bugSTDOUT.pl #!/usr/bin/perl print STDOUT "Running bugSTDOUTb.pl with backticks\n"; print STDOUT "stdout from bugSTDOUTb.pl=" . `$^X bugSTDOUTb.pl` . "\n" +; bugSTDOUTb.pl #!/usr/bin/perl print STDOUT "Running bugSTDOUTc.pl with system()\n"; system( $^X, 'bugSTDOUTc.pl' ); print STDOUT "$0 done\n"; bugSTDOUTc.pl #!/usr/bin/perl print STDOUT "Hello world!\n";

    You get the behaviour you are seeking:

    C:\test>bugSTDOUT.pl Running bugSTDOUTb.pl with backticks stdout from bugSTDOUTb.pl=Running bugSTDOUTc.pl with system() Hello world! bugSTDOUTb.pl done

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      I'd like to understand better what you're saying then. I probably won't get to play with this more until after the weekend, but I did have a question about the '+' in your bugSTDOUT.pl. That's a syntax error for me. I would have thought it was probably a typo but you took the extra time to make it red so I doubt it. With the line-wrap I thought maybe I was missing something. Can you comment on what the '+' before the semicolon is for and if its something more than:
      ... "/n" +;
        Notice the "+" is red. It's added by the autowrapping done by PerlMonks. Click on "download" to get the code as posted.
Re^3: STDOUT missing on Windows, works on Unix
by roboticus (Chancellor) on Dec 13, 2008 at 13:17 UTC