Bash-Befehlsdatei

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
KMachine
User
Beiträge: 5
Registriert: Donnerstag 29. Januar 2009, 20:47
Kontaktdaten:

Mittwoch 4. Februar 2009, 16:32

Hallo Forum,

Ich hatte die Idee ein Python-Programm zu erstellen, welches die Funktion hat, von mir angegebene Bash-Befehle, mit Defintion, in einer Liste zu speichern.
Der Inhalt des Dictionary sollte wiederum in einer externen Text-Datei gespeichert werden.

Ich habe da konkrete Ideen wie ich es anstellen könnte, aber ich bin ein relativer Neuling in Python. Meine Kenntnisse habe ich mir mit dem Galileo-Openbook(Python - Das umfassende Handbuch) aufgebaut.
IMHO: Ich finde es, als Anfänger ab dem Kapitel Objektorientierung zu kompliziert. Auch Basis-Dateitypen hätte ich wohl mit meinen C-Grundkenntnissen nicht richtig verstanden, doch ich will jetzt nicht zu sehr vom eigentlichen Thema abgleisen.
Gerade, weil ich ein Neuling bin, wollte ich das Programm mit Hilfe von Klassen und Definitionen schreiben (OO), damit ich mehr Verständnis für diese entwickeln kann, denn ich hatte noch sehr wenig Kontakt mit Objekt-orientierten Programmiersprachen.

Hier der Code (Ich habe es übertrieben kommentiert, aber das hilft vielleicht meine Vorangehensweise zu verstehen [und zu korrigieren ;)], wobei eigentlich alles selbsterklärend ist)

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: latin-1 -*-

# "Bash-Befehlssammler"

class Sammler(object):

	def __init__(self, befehl, definition):
		self.befehl = befehl
		self.defintion = definition
	
	def Neuer_Befehl(self, befehl):

		self.befehl = befehl
		# if-Bedingung für "befehl"
		if self.befehl <= 0:
			# selbsterklärend
			print "Ungueltige Angabe"
			return False
		else:
			# weiße befehl seinen Wert zu
			return befehl

	def Neue_Definition(self, definition):
		self.definition = definition
		# Selbe Szenario wie oben
		if self.definition <= 0:
			print "Ungueltige Angabe"
			return False
		else:
			return definition

# Ende der Klasse

# Eingabe der benötigten Daten

bef = raw_input("Befehl: ")
def_ = raw_input("Definition: ")

fuerdatei = Sammler(bef, def_)

print fuerdatei.Neuer_Befehl()
#fobj = open("Befehle.txt", "a")
#Hier weiß ich nicht was ich angeben soll
#fobj.close
Das ist die minimalste Basis.Trotzdem habe ich Fragen:
1. Wenn ich das Programm ausführe erhalte ich folgendes:

Code: Alles auswählen

Traceback (most recent call last):
  File "bash-Befehlssammler.py", line 42, in <module>
    print fuerdatei.Neuer_Befehl()
TypeError: Neuer_Befehl() takes exactly 2 arguments (1 given)
Wieso will die Methode Neuer_Befehl 2 Argumente?

2. Was kann ich verbessern? Habe ich Fehler gemacht?

3. Wie speichere ich die Daten in der Datei "Befehle.txt"?

Ich erwarte keinen fertigen Code zum Programm(was wohl überflüssig zu erwähnen ist), aber ich bin für jede Hilfestellung dankbar.

Gruß KMachine
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 4. Februar 2009, 19:09

KMachine hat geschrieben: Meine Kenntnisse habe ich mir mit dem Galileo-Openbook(Python - Das umfassende Handbuch) aufgebaut.
IMHO: Ich finde es, als Anfänger ab dem Kapitel Objektorientierung zu kompliziert. Auch Basis-Dateitypen hätte ich wohl mit meinen C-Grundkenntnissen nicht richtig verstanden, doch ich will jetzt nicht zu sehr vom eigentlichen Thema abgleisen.
Das wird hier nicht empfohlen im Board! (SuFu, da findeste zig Sachen dazu, an welchen Stellen das Buch schlecht ist!)
Gerade, weil ich ein Neuling bin, wollte ich das Programm mit Hilfe von Klassen und Definitionen schreiben (OO), damit ich mehr Verständnis für diese entwickeln kann, denn ich hatte noch sehr wenig Kontakt mit Objekt-orientierten Programmiersprachen.
Aber es ist eben nicht sinnvoll, alles in Klassen zu propfen! Speziell Dein Beispiel ist dafür gerade nicht geeignet. Die Klasse ist überflüssig und noch dazu ist darin Copy&Paste-Programmierung zu finden (Neuer_Befehl und Neue-Definition unterscheiden sich in nichts, außer der Namensgebung!)
Hier der Code (Ich habe es übertrieben kommentiert, aber das hilft vielleicht meine Vorangehensweise zu verstehen [und zu korrigieren ;)], wobei eigentlich alles selbsterklärend ist)
Aber eben nicht PEP8 konform geschrieben!
http://www.python.org/dev/peps/pep-0008/

Kommentare dienen nicht dazu triviale und durch den Code erkennbare Dinge zu kommentieren!
Das ist die minimalste Basis.Trotzdem habe ich Fragen:
1. Wenn ich das Programm ausführe erhalte ich folgendes:

Code: Alles auswählen

Traceback (most recent call last):
  File "bash-Befehlssammler.py", line 42, in <module>
    print fuerdatei.Neuer_Befehl()
TypeError: Neuer_Befehl() takes exactly 2 arguments (1 given)
Wieso will die Methode Neuer_Befehl 2 Argumente?
Sie will zwei, weil Du zwei Argumente in der Definition angibst ;-) Du übergibst der Methode aber keinen Parameter! Daher der Fehler.
Für das "self" brauchst Du nichts mitgeben - das ist ein spezieller Parameter, den ich hier nicht gut erklären kann. Ich wette die Profis hier haben dazu einen passenden Link parat! ;-) Grob gesagt geht es bei dem self darum, die Methode der Klasse zuzuordnen.

Aber für "befehl" musst Du natürlich einen Befehl mitgeben, etwa:

Code: Alles auswählen

print fuerdatei.Neuer_Befehl("ls")
Getter und Setter werden in Python aber generell wenn schon mit Properties gelöst!
2. Was kann ich verbessern? Habe ich Fehler gemacht?
Keine Klasse verwenden! ;-)
Methoden, die etwas setzen, geben idR eher mal nichts zurück!
Halte Dich an PEP8 - das hilft Dir und anderen, Deinen Code besser zu verstehen!
3. Wie speichere ich die Daten in der Datei "Befehle.txt"?
Im Ernst: Dir fehlen sämtliche Grundlagen! Das "Projekt" scheint Dich zu überfordern! Arbeite das offizielle Tutorial durch, ansonsten suche hier im Board oder auch im wiki nach Tutorials, da werden ettliche empfohlen (nur eben nicht das OpenBook :-D )

Für Dein Problem gibt es Dictionaries! Lerne lieber erst einmal etwas über die grundlegenden Datentypen in Python - ohne die kommst Du nicht weit!

Suche nach Code hier im Forum oder im Netz. Schau ihn Dir an und lerne daraus. Speziell das Öffnen und Speichern von Dateien ist wirklich elementar und dazu noch recht trivial. Da kommst Du schnell hin.
KMachine
User
Beiträge: 5
Registriert: Donnerstag 29. Januar 2009, 20:47
Kontaktdaten:

Mittwoch 4. Februar 2009, 23:58

Hallo Hyperion!
Hyperion hat geschrieben: Das wird hier nicht empfohlen im Board! (SuFu, da findeste zig Sachen dazu, an welchen Stellen das Buch schlecht ist!)
Ich werde mich mal schlau machen im Forum; ich habe es bereits in einigen Threads gelesen... aber wie kann man das als Anfänger wissen?
[/quote]
Hyperion hat geschrieben: Aber eben nicht PEP8 konform geschrieben!
http://www.python.org/dev/peps/pep-0008/

Kommentare dienen nicht dazu triviale und durch den Code erkennbare Dinge zu kommentieren!
Danke für den Hinweis und den Link! Da habe ich ja viel Gegensätzliches zum Openbook gelesen.
Hyperion hat geschrieben: Keine Klasse verwenden! :wink:
Methoden, die etwas setzen, geben idR eher mal nichts zurück!
Halte Dich an PEP8 - das hilft Dir und anderen, Deinen Code besser zu verstehen!

Kurz und klar.
Hyperion hat geschrieben:Im Ernst: Dir fehlen sämtliche Grundlagen! Das "Projekt" scheint Dich zu überfordern! Arbeite das offizielle Tutorial durch, ansonsten suche hier im Board oder auch im wiki nach Tutorials, da werden ettliche empfohlen (nur eben nicht das OpenBook Very Happy )

Für Dein Problem gibt es Dictionaries! Lerne lieber erst einmal etwas über die grundlegenden Datentypen in Python - ohne die kommst Du nicht weit!

Suche nach Code hier im Forum oder im Netz. Schau ihn Dir an und lerne daraus. Speziell das Öffnen und Speichern von Dateien ist wirklich elementar und dazu noch recht trivial. Da kommst Du schnell hin
Das Openbook schlag ich mir gleich aus dem Kopf und ja im Nachhinein denke ich wäre ein Dictionary eleganter..!

Danke Hyperion, ich werde mich nach deinen Ratschlägen richten! Dein Feedback fand ich wirklich hilfreich und kompetent! Ich habe schon damit gerechnet, dass mein Programmier-Stil stark bemängelt wird, aber da ist halt noch zu wenig da :roll: .


Hyperion: Vielleicht kannst du mir ja bestimmte (Internet-) Literatur bezüglich Python-Programmierung empfehlen. Ich werde diesbezüglich auch noch das Forum durchforsten.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 5. Februar 2009, 00:05

KMachine hat geschrieben:
Hyperion hat geschrieben: Das wird hier nicht empfohlen im Board! (SuFu, da findeste zig Sachen dazu, an welchen Stellen das Buch schlecht ist!)
Ich werde mich mal schlau machen im Forum; ich habe es bereits in einigen Threads gelesen... aber wie kann man das als Anfänger wissen?
Im Forum nachlesen? Also quasi so wie du es jetzt tust :)
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Donnerstag 5. Februar 2009, 07:51

http://www.python.org/
Da findest du das Tutorial und in den Links zu Büchern auch A Byte of Python ... damit solltest du abgedeckt sein ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 5. Februar 2009, 09:17

KMachine hat geschrieben: Danke Hyperion, ich werde mich nach deinen Ratschlägen richten! Dein Feedback fand ich wirklich hilfreich und kompetent! Ich habe schon damit gerechnet, dass mein Programmier-Stil stark bemängelt wird, aber da ist halt noch zu wenig da :roll: .
Was nicht ist, soll doch noch werden ;-)
Antworten