Seite 1 von 1

anfängerproblem

Verfasst: Freitag 10. Juli 2015, 11:45
von berndschusterp
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!

Re: anfängerproblem

Verfasst: Freitag 10. Juli 2015, 11:49
von Kebap
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:

Re: anfängerproblem

Verfasst: Freitag 10. Juli 2015, 11:51
von Dav1d
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.

Re: anfängerproblem

Verfasst: Freitag 10. Juli 2015, 19:15
von berndschusterp
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?

Re: anfängerproblem

Verfasst: Freitag 10. Juli 2015, 23:19
von berndschusterp
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'])

Re: anfängerproblem

Verfasst: Samstag 11. Juli 2015, 10:07
von Dav1d
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.