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); }
In reply to Re^3: open2 with windows diskpart
by ikegami
in thread open2 with windows diskpart
by wxfield
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |