Beste Weg, zu erfassen Ausgang aus dem system-Befehl, um eine Textdatei?
Ich versuche zu erfassen Ausgabe mit Perl - system
Funktion führen und leiten Sie einen system-Befehl den Ausgang in eine Datei, aber aus irgendeinem Grund bekomme ich nicht die gesamte Ausgabe.
Ich bin mit folgender Methode:
system("example.exe >output.txt");
Was ist falsch mit diesem code, oder gibt es eine alternative Möglichkeit, die gleiche Sache zu tun?
- wo example.exe ist ein win32-Konsole-Anwendung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gleiche wie MVS Antwort, aber modern und sicher.
einfacher
wenn Sie brauchen, sowohl STDOUT und STDERR
autodie
ist. Und viertens, wie habe ich missSTDERR
? Fünfte, ja Sie können es tun alle mit der shell-Umleitung, aber Frank schon gemacht, und ich kein Vertrauen in die Windows-shell/ ich habe keinen windows-Rechner testen, alles auf so mager auf gelöst Rädern.or
vs.||
, obwohl. Entweder arbeitet man hier, aberor
ist besser für Fehler zu überprüfen, so werde ich Bearbeiten. Ich war coding in PHP zu der Zeit und habe meine Drähte gekreuzt ein wenig. Wie für den rest, TMTOWTDI. 🙂or
, und ich habe immer instrict
undwarnings
für alle Neulinge präsentieren2>
Sachen auch auf der Micosoft-geritten-ports. Ilya steckte es in. Und auch er nicht, wir wissen doch, wie dup unserer Deskriptoren korrekt.system
für was es für entworfen wurde, ist, wie ich es tun würde. Es ist schlauer, als Sie vielleicht denken, und wirklich, wenn Sie nicht gut genug, um so grundlegende einer operation wie dieser, dann gibt es ein Problem, das repariert werden muss.if (system("proggie >outfile 2>&1") != 0) { ... }
Umleiten der Ausgabe mit nur - > nur fangen STDOUT. Wenn Sie wollen auch zu fangen STDERR, verwenden Sie 2>&1:
Weitere details finden Sie unter Perlmonks
Wenn Sie möchten recirect Ausgang dauerhaft, die Sie tun können:
Könnte man auch versuchen, mit Perl-erfassen Sie die Ausgabe statt:
Ich finde das übrigens ein sehr schöner Weg, es zu tun:
Dank DWGuru für die Kommentare auf Capture::Tiny::Erweiterte. 🙂
Dies funktioniert:
In C-code haben, könnten Sie die folgende Zeile zur Aufzeichnung der erforderlichen Ausgabe: