System Befehl in C++ läuft nicht wie in der Kommandozeile
-
Hallo,
ich habe folgendes Problem in C++.
Ich möchte ein paar Kommandobefehle über system() ausgeben.
Jedoch funktionieren die nicht so, wie man es von der direkten Kommandozeile her kennt.Ich möchte im Programm ein paar Werte aus einer sqlite3 Datenbank auslesen und in eine Datei schreiben.
Anschließend sollen die Daten geplottet werden. Keine sehr schöne Lösung, aber es soll erstmal grundsätzlich funktionieren
string StrOutput = "sqlite3 test.db 'select date, time, tempin, tempout, humidity from messwerte where datetime between \"2015-01-16 16:00:00\" AND \"2015-01-18 18:00:00\" ' > test.txt"; cout << StrOutput; system(("'"+StrOutput+"'").c_str()); system ("gnuplot < einstellungen.plt"); system ("rm test.txt");Wenn ich das mit meinem Programm drum herum kompiliere, erhalte ich immer die Fehlermeldung:
sh: 1: sqlite3 test.db select: not found line 0: warning: Skipping unreadable file "test.txt" line 0: warning: Skipping unreadable file "test.txt" line 0: warning: Skipping unreadable file "test.txt" line 0: No data in plot rm: das Entfernen von »test.txt“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden sqlite3 test.db 'select date, time, tempin, tempout, humidity from messwerte where datetime between "2015-01-16 16:00:00" AND "2015-01-18 18:00:00" ' > test.txtWenn ich aber meinen erzeugten Kommandozeilenbefehl:
sqlite3 test.db 'select date, time, tempin, tempout, humidity from messwerte where datetime between "2015-01-16 16:00:00" AND "2015-01-18 18:00:00" ' > test.txtdirekt so in der Kommandozeile ausführe, dann funktioniert alles wie gewollt.
Hat jemand eine Idee? Ich befürchte, dass es an der Zeile hängt, in der ich der system() Funktion den fertig gebauten String mit der Abfrage übergebe.
Gruß
Julian
-
sh: 1: sqlite3 test.db select: not foundDas sagt doch alles, was man wissen muss, oder? Wahrscheinlich ist das Arbeitsverzeichnis deines Programms ein anderes als das in dem du dein Testkommando ausführst.
Sowohl für SQL als auch für Gnuplot gibt es Bibliotheken, mit denen man diese direkt steuern kann, ohne derart umständlich über system-Befehle hantieren zu müssen.
-
Wieso setzt du nochmal '' um den Befehl? Das ist hier direkt für den Fehler verantwortlich.
SeppJ schrieb:
sh: 1: sqlite3 test.db select: not foundDas sagt doch alles, was man wissen muss, oder? Wahrscheinlich ist das Arbeitsverzeichnis deines Programms ein anderes als das in dem du dein Testkommando ausführst.
Ich glaube, du missinterpretierst die Meldung.
-
Bashar schrieb:
Wieso setzt du nochmal '' um den Befehl? Das ist hier direkt für den Fehler verantwortlich.
SeppJ schrieb:
sh: 1: sqlite3 test.db select: not foundDas sagt doch alles, was man wissen muss, oder? Wahrscheinlich ist das Arbeitsverzeichnis deines Programms ein anderes als das in dem du dein Testkommando ausführst.
Ich glaube, du missinterpretierst die Meldung.
Oh, jetzt sehe ich es. Du hast natürlich recht. Da habe ich den Doppelpunkt unterbewusst an eine andere Stelle des Satzes versetzt.
-
Besten Dank!
Es funktioniert ganz normal mit:
system((StrOutput ).c_str());