Anfängerproblem: open() geht nicht

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
TheRealBachelor
User
Beiträge: 2
Registriert: Dienstag 16. Oktober 2007, 08:03

Hallo,

bin relativ neu in der python-materie. Ich habe in meinem Praktikum die Aufgabe bekommen eine kleine Webapplikation zu schreiben. Klappt bis jetzt gut und python gefällt mir von tag zu tag mehr :)

Jetzt habe ich nur ein Problem, dass ich mir überhaupt nicht erklären kann. Ich will eine Datei öffnen und da gibt er mir immer einen Fehler zurück (siehe code weiter unten). Das kuriose dabei ist, dass es bisher an anderen stellen wo ich es genauso gemacht habe geklappt hat. Der Pfad zur Datei stimmt 100% und auch der Rest sollte stimmen. Achso ja... Die Datei die es zu öffnen gilt hat keine file-extension. Daran liegt aber auch nicht, da ich diese mal in eine txt umbenannt hatte und es dann auch nicht geklappt hatte.

Also hier erstmal mein Fehlercode:
C:\xampp\cgi-bin\urlaub\index.cgi
36 password = str(fs.getvalue("password"))
37 from content import login
38 print login.logging_in(ADMIN_PASS, username, password)
39
40 elif session_id in sess_list:
login = <module 'content.login' from 'C:\xampp\cgi-bin\urlaub\content\login.pyc'>, login.logging_in = <function logging_in>, ADMIN_PASS = 'xxx', username = 'xxx', password = 'xxx'
C:\xampp\cgi-bin\urlaub\content\login.py in logging_in(admin_pass='xxx', username='xxx', password='xxx')
27 output = 'Sie haben ein falsches Passwort eingegeben!'
28 else:
29 shadow_open = open('./users/shadow', 'r')
30 shadow_file = shadow_open.readlines()
31 shadow_file_count = shadow_file.count()
shadow_open undefined, open = <built-in function open>

TypeError: an integer is required
args = ('an integer is required',)
Seht ihr den Fehler? Ich werde daraus einfach nicht schlau.

Vielen Dank vorab für eure Antworten!
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Die Fehlermeldung finde ich merkwuerdig, aber der count-Aufruf ist nicht richtig, der erwartet einen Parameter. Wahrscheinlich meinst du eher len(shadow_open)?

Ansonsten musst du dran denken, dass cgi-Prozesse auf *nix-servern gerne unter dem User nobody laufen, und man somit auf viele Dateien wg. fehlender Rechte nicht zugreifen kann.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
BlackJack

Ist `open()` wirklich das `open()` aus `__builtins__`? Bei `os.open()` bekommt man zum Beispiel diese Ausnahme:

Code: Alles auswählen

In [556]: os.open('test.py', 'r')
---------------------------------------------------------------------------
<type 'exceptions.TypeError'>             Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

<type 'exceptions.TypeError'>: an integer is required
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Oh, guter Tipp. Boese *-importe?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
TheRealBachelor
User
Beiträge: 2
Registriert: Dienstag 16. Oktober 2007, 08:03

vielen dank! ja es lag an meinem from os import *

nun noch eine frage zum count()... da ich ja mit readlines() eine liste aller zeilen erstelle, möchte ich anschließend wissen wieviele elemente/zeilen in dieser liste sind.

Welchen parameter benötigt denn count()?
Return the number of occurrences of x in the array.
??? Verstehe ich überhaupt nicht was er da für ein x haben will.

Ist count() üerhaupt das richtige dafür?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Rebecca hat geschrieben:Wahrscheinlich meinst du eher len(shadow_open)?
count zaehlt, wie haeufig ein Element in einer Liste vorkommt.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Antworten