in reply to Re: open2 with windows diskpart
in thread open2 with windows diskpart

I think autoflush is set to true by default, and you are probably right about me checking for too many errors. Other than those items, were you able to get the snippet to function on Windows with diskpart?

Replies are listed 'Best First'.
Re^3: open2 with windows diskpart
by ikegami (Patriarch) on Jun 17, 2009 at 01:59 UTC

    Worked fine for me simply by adding the missing "\n" I mentioned.

    I had problem detecting the prompt because it's not sent until the line is ended (which doesn't happen until someone types since the output appears to be line buffered). I solved that by forcing the prompt to show up twice.

    use strict; use warnings; use IO::Handle qw( ); use IPC::Open2 qw( open2 ); sub wait_for_prompt { my ($to_chld, $fr_chld) = @_; # Force two prompts to appear. print $to_chld "\n"; my $count; while (<$fr_chld>) { print "$.: $_"; last if /^DISKPART> $/ && ++$count == 2; } } { my $pid = open2(my $fr_chld, my $to_chld, 'diskpart'); #print $to_chld "\n"; #wait_for_prompt($to_chld, $fr_chld); print $to_chld "list disk\n"; wait_for_prompt($to_chld, $fr_chld); print $to_chld "exit\n"; wait_for_prompt($to_chld, $fr_chld); close $to_chld; waitpid($pid, 0); }

      I think I must be either missing something in my perl distro or maybe my OS ver is messing this up for me. I still can't seem to get this working.

        Then I guess yours isn't line buffered. You'll need to convince diskpart it's talking to a terminal.