2013-09-12T17:36:01 GwenDragonWelche Probleme hast du denn bei IPC::Cmd genau?
2013-09-12T17:36:01 GwenDragonIPC::Open3 keine Lösung?
2013-09-12T17:46:18 GwenDragonWas klappt da bei dir nicht?
Quote'file not found:...
2013-09-12T17:36:01 GwenDragonIPC::Open3 keine Lösung?
Quotecpan> install IPC::Open3
Warning: Cannot install IPC::Open3, don't know what it is.
Try the command
i /IPC::Open3/
to find objects with matching identifiers.
cpan> i /IPC::Open3/
Module < IPC::Open3::Callback (LTHEISEN/IPC-Open3-Callback-1.01.tar.gz)
Module < IPC::Open3::Callback::Command (LTHEISEN/IPC-Open3-Callback-1.01.tar.gz)
Module < IPC::Open3::Callback::CommandRunner (LTHEISEN/IPC-Open3-Callback-1.01.tar.gz)
Module < IPC::Open3::Callback::NullLogger (LTHEISEN/IPC-Open3-Callback-1.01.tar.gz)
Module < IPC::Open3::Simple (ERWAN/IPC-Open3-Simple-0.04.tar.gz)
Module < IPC::Open3::Utils (DMUEY/IPC-Open3-Utils-0.8.tar.gz)
6 items found
2013-09-12T17:36:01 GwenDragonIPC::Open3 keine Lösung?
2013-09-12T17:36:01 GwenDragonIPC::Open3 keine Lösung?
Quote$VAR1 = \*Symbol::GEN1;
$VAR1 = \*Symbol::GEN2;
$VAR1 = \*Symbol::GEN0;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl use strict; use warnings; use diagnostics; use Data::Dumper; use IPC::Open3; my %conf = ( pfad => 'C:/Program Files/******', exe => '*****', ); my ($wtr,$rdr,$err); use Symbol 'gensym'; $err = gensym; my $pid = open3($wtr,$rdr,$err,"$conf{pfad}/$conf{exe}"); print Dumper($wtr); print Dumper($rdr); print Dumper($err);
2013-09-13T09:00:32 GwenDragonIPC::Open3 dient nur dazu ein externes Programm zu starten und dabei auf STDIN, STDERR, STDOUT zugreifen zu können.
2013-09-13T09:00:32 GwenDragonSo wie ich dein Vorhaben und Wissen jetzt interpretiere, ist das dann nicht für dich geeignet.
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/usr/bin/perl use 5.010; use strict; use warnings; use IPC::Cmd qw[can_run run run_forked QUOTE]; my $p=can_run('gpg'); run( command => $p . ' --list-keys test@gwendragon', buffer=>\my $buffer ); say $buffer;
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::Cmd qw[can_run run run_forked QUOTE]; #my $p=can_run('gpg2'); my $p = QUOTE . 'C:\Program Files (x86)\GNU\GnuPG\pub\gpg2.exe' . QUOTE; run( command => $p . ' --list-keys test@gwendragon', buffer=>\my $buffer ); say $buffer;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#!/usr/bin/perl use strict; use warnings; use diagnostics; use IPC::Cmd 0.84 qw[can_run run run_forked QUOTE]; # Achtung: Cmd.pm Zeile 235 muss auf Win 32Bit so lauten: my $abs = File::Spec->catfile( IS_WIN32 ? Win32::GetShortPathName( $dir ) : Win32::GetANSIPathName($dir), $command); use Data::Dumper; my %conf = ( exe => 'gpg2.exe', ); my $full_path = can_run($conf{exe}); if (defined $full_path) { print "verwende Pfad '$full_path'\n"; my $cmd = $full_path .'' ; my @return = run( command => $cmd, # verbose => 0, buffer =>\my $buffer, timeout => 20, ); # print Dumper(\@return); if ($buffer =~ /gpg: Go ahead and type your message/i) { print WOHIN? "Test"; } # if (defined $buffer) { # print "\n\nErgebnis:\n$buffer"; # } # else { # print "Programmstart gescheitert\n"; # } } else { print "Nicht installiert oder nicht im path\n"; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
my $pid; eval{ $pid = open3($infh, $outfh, $errfh, $cmd); }; die "open3: $@\n" if $@; print "PID was $pid\n"; my $sel = new IO::Select; # create a select object to notify # us on reads on our FHs $sel->add($outfh,$errfh); # add the FHs we're interested in while(my @ready = $sel->can_read) { # read ready foreach my $fh (@ready) { my $line = <$fh>; # read one line from this fh if(not defined $line){ # EOF on this FH $sel->remove($fh); # remove it from the list next; # and go handle the next FH } if($fh == $outfh) { # if we read from the outfh print OUTPUT $line; # print it to OUTFH } elsif($fh == $errfh) {# do the same for errfh print ERRLOG $line; } else { # we read from something else?!?! die "Shouldn't be here\n"; } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
#!/usr/bin/perl use strict; use warnings; use diagnostics; use Data::Dumper; use IPC::Open3; use IO::Select; my %conf = ( pfad => 'C:/Program Files/GNU/GnuPG/pub', exe => 'gpg2zum_test_falsch_geschrieben.exe', ); my ($pid,$infh,$outfh,$errfh); eval { $pid = open3($infh,$outfh,$errfh,"$conf{pfad}/$conf{exe}"); }; if ($@) { print "Fehler '$@' beim Programmstart\n"; } else { print "PID '$pid'\n"; my $sel = new IO::Select; $sel->add($outfh,$errfh); local *OUTPUT; local *ERRLOG; while(my @ready = $sel->can_read) { foreach my $fh (@ready) { my $line = <$fh>; if(not defined $line){ $sel->remove($fh); next; } if($fh == $outfh) { print OUTPUT $line; } elsif($fh == $errfh) { print ERRLOG $line; } else { die "Shouldn't be here\n"; } } } }
QuotePID '3800'
perldoc GnuPG::Interface...
Description
GnuPG::Interface and its associated modules are designed to provide an object-oriented method for interacting with GnuPG, being able to perform functions such as but not limited to encrypting, signing, decryption, verification, and key-listing parsing.
...
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;
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();
2013-09-14T13:13:09 murphyWillst du mich ärgern? Darum geht doch gar nicht ob aus POPELIN oder POPELOUT gelesen werden kann!Ohne jetzt besserwisserisch klingen zu wollen, würde ich nicht erwarten, dass man von STDOUT unbedingt lesen können sollte :-)
2013-09-14T13:13:09 murphyUnd wenn IO::Select hinreichend schlau ist, tut es das vielleicht inzwischen.
2013-09-14T16:18:15 GwenDragonSchau mal perldoc pipe
2013-09-14T16:18:15 GwenDragon
2013-09-14T16:18:15 GwenDragon
2013-09-14T16:18:15 GwenDragon
2013-09-14T16:18:15 GwenDragonMir ist das zu internes Gewühl.
2013-09-18T13:18:20 GwenDragonWie erfahren bist du denn mit Prozesskommunikation auf Systemebene?
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/perl use 5.010; use strict; use warnings; $|=1; say "Bitte Eingaben: "; while (<>) { chomp; say "Konvertiere '$_' -> '\u$_'"; # Mach riesengroße Buchstaben am Anfang ;) } 1;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
#!/usr/bin/perl use 5.010; use strict; use warnings; #$ENV{IPCRUNDEBUG}="data"; # debug modus use IPC::Run qw( start pump finish timeout harness ); my (@prog, $in, $out, $err); # Incrementally read from / write to scalars. # $in is drained as it is fed to cat's stdin, # $out accumulates cat's stdout # $err accumulates cat's stderr # $h is for "harness". @prog = ('perl','X:\bin\doit.pl' ); my $h = start \@prog, \$in, \$out, \$err, 10; # Erste Ausgabe des aufgerufenen Programms pump $h until length $out; # Prüfen ob Eingabe erwünscht if ($out =~ /Eingaben:/mg) { # und Eingabe an externes Programm raus $in = "aoeiooeiikmdujkdu\n"; $in .= "abcdefg\n"; $in .= "a\n"; $in .= "ax\n"; $in .= "asseae\n"; } # Hol Ausgabe des externes Programm ab pump $h until length $out; # und Schluss ... finish $h or die "@prog beendet mit Fehlercode $?"; # zeig was das Programm ausgegeben hat say "PROGRAMMAUSGABE:"; say $out;