anfängerproblem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
berndschusterp
User
Beiträge: 3
Registriert: Freitag 10. Juli 2015, 11:09

Hallo zusammen,

ich programmiere erst seit 2 Wochen und kenne mich daher nicht so gut.

Ich arbeite mit einem Raspberry Pi und lese mit diesem Daten aus.
Diese Daten schreibe ich eine .txt Datei.
Nun möchte ich am Ende des Python Programms diese .txt Datei automatisch mit Gnuplot öffnen und mir einen Graphen daraus ploten und abspeichern lassen.
Das Problem dabei ist, dass der Dateiname bei jedem Ausführen des Python Programms neu erstellt werden soll.

so erstelle ich meine .txt datei

Code: Alles auswählen

Dateiname      	= str(datetime.datetime.now().strftime("%Y-%m-%d--%H:%M:%S")+'.txt')
f = open(Dateiname,"a")
und was ich jetzt so gegoogelt habe kann ich über:

gnuplot -e "filename='2015-07-10--12-29-20.txt'" gnpl.plg

mir in Kombination mit der Datei gnpl.plg:

set terminal png
set output 'output.png'
plot filename every ::3 w l

meinen Graphen erstellen lassen (was auch so manuell funktioniert).

über:

Code: Alles auswählen

os.system()
kann ich python einen Befehl geben der ausgeführt werden soll?

Hatte deswegen gedacht es so zu probieren:

Code: Alles auswählen

string=str('gnuplot -e filename='+Dateiname+' gnpl.plg')
cmd="echo "+string
os.system(cmd)
da kommt dann aber einfach am Ende der Ausgabe:

gnuplot -e filename=2015-07-10--12-29-20.txt gnpl.plg

und es passiert nichts. Liegt es daran, dass die ' und " nicht übergeben werde?
Wie löse ich das Problem?

Danke schon einmal!
Benutzeravatar
Kebap
User
Beiträge: 686
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Hallo und willkommen bei Python und hier im Forum!

Deine Vermutung kann ich nicht bestätigen. Der Befehl "echo" wird einfach benutzt, um Text auszugeben. So wird dann also deine Befehlszeile ausgegeben. Ich habe den Eindruck, du könntest eventuell zu viel gleichzeitig lernen wollen. Es ist zwar kein Python-Befehl, aber vielleicht kennst du die Shell Kommandos ja auch schon länger als 2 Wochen?
Liegt es daran, dass die ' und " nicht übergeben werde?
Solche Fragen kannst du dir in der interaktiven Python Konsole sehr leicht selbst beantworten, indem du es mit "print" einfach mal ausprobierst. :wink:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Du rufst `echo gnuplot -e filename=2015-07-10--12-29-20.txt gnpl.plg` in deiner Shell auf, natürlich bekommst du nur die Ausgabe von *echo*.

Code: Alles auswählen

import subprocess

subprocess.call(['gnuplot', '-e', 'filename={0}'.format(dateiname), 'gnpl.plg'])
Das sollte an und für sich funktionieren, generell solltest du das `subprocess`-Modul statt `os.system` verwenden, mehr dazu in der Dokumentation.

Python hat einen eigenen Coding-Style der in der PEP-8 festgehalten ist, das solltest du dir mal bei Gelegenheit durchlesen.
the more they change the more they stay the same
berndschusterp
User
Beiträge: 3
Registriert: Freitag 10. Juli 2015, 11:09

vielen Dank für die Antworten!!

Shell Kommandos kenne ich kaum.
Ich werde mir die Dokumentationen dieses Wochenende mal anschauen.

Wenn ich den Code einfüge, erstellt er mir leider trotzdem keinen Graphen.
Es erscheint:


filename=2015-07-10--13-59-21.txt
^
line 0: ';' expected

(^ dieses Zeichen ist unter dem t von .txt)

Wenn ich es wie im ersten Post beschrieben, 'manuell' aufrufe geht es, deswegen denke ich dass die Daten die geplotet werden sollen und die Gnudatei (gnpl.plg) stimmen müssten.

Update:
Wenn ich
gnuplot -e filename=2015-07-10--13-59-21.txt gnpl.plg
eingebe direkt, bekomme ich den gleichen Fehler wie oben beschrieben
wenn ich aber:
gnuplot -e 'filename="2015-07-10--13-59-21.txt"' gnpl.plg
eingebe dann geht es.

Wie mache ich das aber in Python?
berndschusterp
User
Beiträge: 3
Registriert: Freitag 10. Juli 2015, 11:09

Mittlerweile habe ich es hinbekommen!

Code: Alles auswählen

Dateiname      	= str(datetime.datetime.now().strftime("%Y-%m-%d--%H-%M-%S")+'.txt')
DateinameGnu	= str('"'+Dateiname+'"')

subprocess.call(['gnuplot', '-e', 'filename={0}'.format(DateinameGnu), 'gnpl.plt'])
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

So sollte das Ganze aussehen, was passiert wenn dein `dateiname` zufällig ein `"` enthält?

Code: Alles auswählen

try:
    from pipes import quote
except ImportError:
    from shlex import quote

subprocess.call(['gnuplot', '-e', 'filename="{0}"'.format(quote(dateiname)), 'gnpl.plt'])

Wenn du wirklich mit Python arbeiten willst, nochmals der Hinweis auf die PEP-8.
the more they change the more they stay the same
Antworten