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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top