Segmentation fault bei Schreiben in Dateien

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.
Benutzeravatar
sparrow
User
Beiträge: 4186
Registriert: Freitag 17. April 2009, 10:28

mocca hat geschrieben:weil mir im telnet dann angezeigt wird "segmentation fault" ;)
leonidas meint damit: wie kommst du darauf, dass das an dem Script liegt, bzw. an der Art wie in die Datei geschrieben wird.
Denn das _Script_ liefert ja kein segfault zurück.
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

das müsste ich mal im hintergrund mitloggen. gute idee.

ich komme darauf, weil wenn ich die dateien mit cat lese, ich keinen fehler kriege. wenn ich den mediaplayer ohne änderungen öffne, bekomme ich keinen fehler. wenn ich irgendwas mache, was nicht das ändern der dateien aus dem py-code des plugins mache, bekomme ich keinen fehler und kann die dateien immer auslesen.

sehe nicht, woran es sonst liegen soll, wenn es immer geht, ausser wenn ich die dateien von dem plugin ändern lasse.
Benutzeravatar
sparrow
User
Beiträge: 4186
Registriert: Freitag 17. April 2009, 10:28

So, dann machst du einfach folgendes:

Du gehst mit telnet auf die Maschine und dann nacheinander folgendes eingeben:

Code: Alles auswählen

echo 110 > /proc/stb/video/plane/psi_brightness
echo 120 > /proc/stb/video/plane/psi_contrast
cat /proc/stb/video/plane/psi_brightness
cat /proc/stb/video/plane/psi_contrast
python
with open("/proc/stb/video/plane/psi_brightness","w") as f: write("140\n")

with open("/proc/stb/video/plane/psi_contrast","w") as f: write("120\n")

quit()
cat /proc/stb/video/plane/psi_brightness
cat /proc/stb/video/plane/psi_contrast

Und anschließend kopierst du einfach die gesamte Ausgabe des Terminals hier rein.

Danke.


Sparrow
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

da stimmt was nicht.
wenn ich de befehl eingebe wie von dir gepostet, dann bleibt er nach dem python-befehl einfach mit "..." in der zweiten reihe stehen.

hab mal Return gedrückt, dann mal das quit() reingesetzt. hmmm.

EDIT:
moment. da hat bei dir das f vor dem f.write gefehlt.
ich machs nochmal.


so, jetzt:

Code: Alles auswählen

user:~# echo 110 > /proc/stb/video/plane/psi_brightness
user:~# echo 120 > /proc/stb/video/plane/psi_contrast
user:~# cat /proc/stb/video/plane/psi_brightness
110
user:~# cat /proc/stb/video/plane/psi_contrast
120
user:~# python
Python 2.6 (r26:66714, May  6 2010, 00:42:10) 
[GCC 4.1.1 (STMicroelectronics/Linux Base 4.1.1-23)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> with open("/proc/stb/video/plane/psi_brightness","w") as f: f.write("140\n")
... 
>>> with open("/proc/stb/video/plane/psi_contrast","w") as f: f.write("120\n")
... 
>>> quit()
user:~# cat /proc/stb/video/plane/psi_brightness
140
user:~# cat /proc/stb/video/plane/psi_contrast
120
user:~#
das funktioniert. sprich per console gehts schonmal.

soll ich jetzt

Code: Alles auswählen

		with open('/proc/stb/video/plane/psi_brightness', 'w') as brightness:
			brightness.write('140\n')
		brightness.close
		with open('/proc/stb/video/plane/psi_contrast', 'w') as contrast:
			contrast.write('120\n')
		contrast.close
einbauen und schauen?


EDIT2:
habe den code wie gepostet mal eingebaut. ist das ein fehler drin?

sobald ich nämlich das plugin aufrufe kommt wieder dauerspinner und per telnet

Code: Alles auswählen

user:~# cat /proc/stb/video/plane/psi_contrast
Segmentation fault
user:~# cat /proc/stb/video/plane/psi_contrast
Segmentation fault
user:~# 
Zuletzt geändert von mocca am Donnerstag 10. Februar 2011, 11:03, insgesamt 1-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 4186
Registriert: Freitag 17. April 2009, 10:28

Code: Alles auswählen

                with open('/proc/stb/video/plane/psi_brightness', 'w') as brightness:
                        brightness.write('140\n')
                with open('/proc/stb/video/plane/psi_contrast', 'w') as contrast:
                        contrast.write('120\n')
Ohne Close, das ist ja das besonder an dem with-Block.
Nach Ablauf wird automatisch die Datei geschlossen, auch falls eine Exception auftritt und die nicht behandelt wird.
Das ersetzt also in diesem Fall den try-except-finally-Blocl.

Gruß
sparrow
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

ok, dann ignorier den zweiten Edit.

Ich probiers nochmal ohne das close.

EDIT:
so, ohen close probiert. Trotzdem kriege ich nach öffnen des Pythonskriptes per Telnet einen Segmentation Fault

Code: Alles auswählen

user:~# cat /proc/stb/video/plane/psi_brightness
Segmentation fault
Ich muss mal schauen. Während des Bootes bekommt man den auch. Ich glaube der Grafiktreiber wird dann aber initialisiert und dann erst ist die Datei zugreifbar. Eventuell müsste man den Wert schreiben und dann den Treiber neu initialisieren.

Aber ich weiss ncht wieso, denn wenn ich den Code via Telnet ausführe, dann wird on-the-fly geändert und ich sehe sofort die Bildanpassungen.

Irgendwas ist da faul, ich befürchte es ist nicht der Python Code.
Benutzeravatar
sparrow
User
Beiträge: 4186
Registriert: Freitag 17. April 2009, 10:28

Offensichtlich geht da etwas anderes schief.

Zum debuggen müsstest du aber noch tiefer ins Detail gehen. Das Script scheint ja noch sehr viel mehr zu machen als nur diese beiden Werte anzupassen.

Kannst du eine beliebige andere Datei mit 'cat' ausgeben lassen wenn das Problem auftritt?

Gruß
sparrow
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

Gute Frage. Werde ich heute abend mal testen!
Manchmal kommt man auf die einfachsten Kurztests nicht selbst :oops:

Gibts ne Möglichkeit dass Python mit ausgibt, was genau es macht? Sozusagen alles logged, was es tut, damit ich das komplette Programm einfach loggen lasse?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``strace`` ist vermutlich die einfachste Lösung. Aber da kommt dann wirklich megabyteweise Ausgaben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mocca
User
Beiträge: 84
Registriert: Mittwoch 4. März 2009, 16:44

ok. also. erster fortschritt.

es funktioniert nun, dass ich die werte beim öffnen des plugins ändern lasse.

problem aber ist, dass er den wert ändert und die datei dann nicht mehr zugreifbar ist.
sprich per telnet bekomm ich den segmentation fault.

problem dabei, wenn ich das plugin verlasse, will ich, dass er die werte wieder auf standard zurücksetzt. geht natürlich nicht, weil die dateien nicht zugreifbar sind.

jemand eine idee?
Antworten