Thread Perl mit Kommandozeilenprogramm kommunizieren (Windows) (79 answers)
Opened by bianca at 2013-09-10 13:07

GwenDragon
 2013-09-14 13:03
#170226 #170226
User since
2005-01-17
14757 Artikel
Admin1
[Homepage]
user image
Wenn du das ausprobierst, siehst du, dass sehr wohl ein Fehlercode zurück gegeben wird.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

use IPC::Open3;

my $cmd = q(P:\Git\bin\ls1.exe);
my $pid;
$pid = open3( \*CMDIN, \*CMDOUT, \*CMDERR, "$cmd" );
waitpid( $pid, 0 );
($?>>8) && say "Fehler bei open3 $cmd";
exit;


Ein eval eines open3 samt $@ bringt nur einen Fehler, wenn das open3 fehlschlägt, aber nicht wenn das aufrufen des externen Programms im Kindprozess fehlschlägt.
Der Fehlercode des forks ist doch in $? drin.

Zu der extrem dünnen Doku zu IPC::Open3 ist nur zu sagen, Perl hat nicht umsonst den Ruf unverständlich zu sein, dazu trägt ungenügende Doku bei.


Ich kriegs mit IPC::Open3 auch nicht gebacken :(

Aus ominösen Gründen klappt unter Windows kein IO::Select->can_read

Testcase:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

use IO::Select;
my $selector = IO::Select->new();
$selector->add(\*STDIN);
my @ready;
say @ready = $selector->can_read();


Debina 6 x64
test@debby:~$ ./i.pl

GLOB(0x1b41410)


Win 7 x64
C:\test>i.pl

C:\test>


Wie soll auch was funktionieren, wenn IO::Select schon nicht klappt wtf....

Siehe auch Perlmonks:651768 von 2007
Unter Windows klappt IO::Select wohl nur mit Sockets.
Damit ist das ganze IPC::.... für Windows nicht möglich.


Editiert von GwenDragon: Hinweis zu $? und Doku, can_read, IO::Select Testcase geändert, Hinweis PerlMonks
Last edited: 2013-09-14 15:18:12 +0200 (CEST)

View full thread Perl mit Kommandozeilenprogramm kommunizieren (Windows)