Ausführen von externem Programm über system () läuft nicht richtig
Frage
Ich versuche, ein Programm (NCBI Blast, für diejenigen, die wissen müssen) anrufen von meinem Code, über den Befehl in einem System () aufrufen Aufruf.
Wenn ich die Zeichenfolge direkt in der Shell ausführen, funktioniert es wie beabsichtigt, aber wenn ich die gleiche Zeichenfolge über System versuchen (), kehrt das Programm viel schneller, ohne die beabsichtigten Ergebnisse. Die Ausgabedatei wird erstellt, aber die Dateigröße ist 0. Der zurückgegebene Fehlercode ist auch 0. Ich anhängen sogar versucht „> output.log 2> error.log“, aber diese Dateien nicht erstellt.
Ich denke, es hat etwas mit Umgebungsvariablen oder dem Pfad zu tun ...
Der Name der Ausgabedatei über -o Kommandozeilenparameter, nicht die Umleitung der Ausgabe gegeben wird.
las ich etwas über den popen Befehl für meinen Anwendungsfall geeignet möglicherweise besser zu sein, aber ich kann es nicht finden, die Bibliothek ist, dass aus?
Lösung
Die gängigste Ursache solcher Probleme ist eine falsche Einstellung der Umgebungsvariablen in denen ~/.bashrc
.
Es soll möglich sein, zu sehen, was ncbi
etwa durch Ausführen unglücklich ist
$SHELL -c '<exact string you pass to system()>'
Ein weiterer gemeinsamer Weg, dies zu debuggen ist mit strace
. Ausführen:
strace -fo /tmp/strace.out ./myProgram
und schaut in /tmp/strace.out
nach Hinweisen.
Andere Tipps
Gibt es einen Grund, dass Sie nicht wollen, und fork
exec
? Dies ist ein gemeinsames Idiom für einen Prozess von einem anderen ausgeführt wird.
popen ist in der Standard-C-Bibliothek die Manpage
Einige kurze Fragen:
- Wie man in der Shell führe in?
- Wie Sie in dem Systembefehl ausführen?
- Was ist der Wert durch das System zurückgegeben wird?
Genaues Kopieren und Einfügen von Ihnen Terminal vorzuziehen ist dann eine englische Beschreibung.