Linux Script Stil okay? + verschiedene Fragen ....

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
bennym
User
Beiträge: 36
Registriert: Freitag 13. Oktober 2006, 21:17
Kontaktdaten:

Freitag 13. Oktober 2006, 21:26

Hallo Leute

Ich hab ein paar Fragen zu einem Script, welches ich fuer mein ubuntu und debian geschrieben habe. Ich bin noch nicht lange mit python am arbeiten, also zerfetzt mich nicht gleich :wink:


1. muss ich \n\n schreiben um 2 absaetze zu machen oder gibts da was, damit ich
irgendwie \2n oder so schreiben kann?

2. kann ich das script so erweitern, dass wenn ich per 'apt-get nvidia-glx' den
grafiktreiber runterlad (im script eingebettet), es dann die xorg.conf editiert
und automatisch den "nv" Treiber durch "nvidia" ersetzt?(und evtl ein back up der
xorg.conf anlegt)

3. gibt es irgendwelche tipps was meinen Stil angeht? vor allem die vielen ''' kommen
mir komisch vor. Macht man nach Kommentarzeilen einen Absatz?

4. Kann ich die Schrift irgendwie einfaerben? (sodass dass die keywords zb. rot sind wenn das Script in der Bash ausgefuehr wird?

Vielen Dank im Vorraus.

mfg benny

Code: Alles auswählen

#!/usr/bin/python

#The universal script <version>

print '''

THE UNIVERSAL SCRIPT <version>                    2006 by mary

Attention! this script requires root rights! '''

# Now we define the infoText function. 

def infoText():
	print '''

Usage:	Type one of the following keywords and accept them by pressing the 
	enter key:
	
	"update"	-- for a system update
	"upgrade"	-- for a system upgrade
	"sysupgrade 	-- for a full system upgrade

	"help"		-- for infotext

	"exit"		-- for to exit the program
	"reboot"	-- for to reboot the system
	"shutdown"	-- for to shutdown the system
	'''

# There we go with echoing the infoText for the user

infoText()

# this while true is for starting again from the beginning
while True:

	s = (raw_input('''Type now a keyword: '''))
	if s == 'update':
		print '\nthis may take a while...\n\n'
		import os
		os.system('apt-get update')

	if s == 'upgrade':
		print '\nthis may take a while...\n\n'
		import os
		os.system('apt-get upgrade')

	if s == 'sysupgrade':
		print '\nthis may take a while...\n\n'
		import os
		os.system ('apt-get dist-upgrade')

# Here comes the shutdown part: 
# I have to check if it works with 'now' because it's int() and the %d

	if s == 'shutdown':
		time2shutdown = int(raw_input(r"Insert the shutdown delay in minutes (type 'now' for no delay): "))
		import os
		x = 'shutdown -h %d' %(time2shutdown)
		os.system(x)
	
# And here is the reboot part:
# And here I have to check the same as above (if 'now' works because of the int and the %d)

	if s == 'reboot':
		time2reboot = int(raw_input(r"Insert the shutdown delay in minutes (type 'now' for no delay): "))
		import os
		z = 'shutdown -r %d' %(time2reboot)
		os.system(z)

# this only repeats the infoText string we defined on the beginning of the program.

	if s == 'help':
		infoText()

# The following 'else' part is for reminding the user to enter one of the keywords

	else:
		print '\nPlease type one of the keywords !\n'
	
# This is for to exit by a break.

	if s == 'exit':
		print '\nHave a nice day !!! good bye! ;-)\n'
		break

# This continue belongs to the while True above 
		continue
BlackJack

Freitag 13. Oktober 2006, 23:21

bennym hat geschrieben:1. muss ich \n\n schreiben um 2 absaetze zu machen oder gibts da was, damit ich
irgendwie \2n oder so schreiben kann?
Nein, '\n\n' ist wohl das kürzeste.
2. kann ich das script so erweitern, dass wenn ich per 'apt-get nvidia-glx' den
grafiktreiber runterlad (im script eingebettet), es dann die xorg.conf editiert
und automatisch den "nv" Treiber durch "nvidia" ersetzt?(und evtl ein back up der
xorg.conf anlegt)
Ja. :twisted:
3. gibt es irgendwelche tipps was meinen Stil angeht? vor allem die vielen ''' kommen
mir komisch vor. Macht man nach Kommentarzeilen einen Absatz?
Deine Zeichenketten sind in der Tat etwas uneinheitlich. Du benutzt ja fast alles, ', ''', " und "raw" Zeichenketten. Dreifache Anführungszeichen brauchst Du nur wenn die Zeichenkette über mehrere Zeilen gehen soll. Und "raw" Zeichenketten nur wenn Du nicht willst, das der rückwärtsgerichtete Schrägstrich seine Sonderbedeutung als Escape-Zeichen hat. Also eigentlich nur in Windows-Pfadnamen und regulären Ausdrücken.

Importe schreiben die meisten Leute einmal oben in den Quelltext. In fast jedem ``if``-Zweig `os` zu importieren ist unnötige Schreibarbeit.

Hast Du mal ausprobiert, was passiert wenn Du für die Zeitangaben wirklich 'now' eingibst? Das lässt sich nicht in eine Zahl umwandeln.

Der einzige ``else``-Zweig wird bei jedem Kommando ausser "help" ausgeführt. Ist das so gewollt?

Und das ``continue`` ist erstens unnötig, die Schleife wird auch ohne dieses Schlüsselwort ausgeführt und zweitens wird es nie ausgeführt, weil das ``break`` davor die Schleife verlässt.
4. Kann ich die Schrift irgendwie einfaerben? (sodass dass die keywords zb. rot sind wenn das Script in der Bash ausgefuehr wird?
Das geht zum Beispiel mit ANSI escape codes.
bennym
User
Beiträge: 36
Registriert: Freitag 13. Oktober 2006, 21:17
Kontaktdaten:

Samstag 14. Oktober 2006, 07:19

Erstmal Danke fuer die Hilfe !!!
Ja. :twisted:
Kannst du mir sagen, wie ich das mache?
Der einzige ``else``-Zweig wird bei jedem Kommando ausser "help" ausgeführt. Ist das so gewollt?
Sorry aber ich versteh nicht ganz was du meinst. Stimmt denn das nicht. Das else ist halt dafuer, dass wenn jemand nen schrott eintippt es einen darauf hinweist und nochmal die eingabe zeile anzeigt.

Den Rest der Fehler behebe ich grand.

Und nochmals vielen dank fuer die Hilfe !!! :D
mfg benny
BlackJack

Samstag 14. Oktober 2006, 09:56

bennym hat geschrieben:Erstmal Danke fuer die Hilfe !!!
Ja. :twisted:
Kannst du mir sagen, wie ich das mache?
Ja. :twisted: :twisted:
Der einzige ``else``-Zweig wird bei jedem Kommando ausser "help" ausgeführt. Ist das so gewollt?
Sorry aber ich versteh nicht ganz was du meinst. Stimmt denn das nicht. Das else ist halt dafuer, dass wenn jemand nen schrott eintippt es einen darauf hinweist und nochmal die eingabe zeile anzeigt.
Die Zeile wird aber auch ausgegeben wenn jemand keinen Schrott eintippt, also zum Beispiel wenn der Benutzer ``update`` eingetippt hat.
bennym
User
Beiträge: 36
Registriert: Freitag 13. Oktober 2006, 21:17
Kontaktdaten:

Samstag 14. Oktober 2006, 10:06

Ja. :twisted: :twisted:
Ich weis ja nicht, ob es dein humor ist Fragen nicht zu beantworten, aber kannst du mir denn nicht schreiben wie das geht?

mfg benny
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Samstag 14. Oktober 2006, 11:25

Hi, schau dir unbedingt mal das optparse-Modul an. Damit kannst du komfortabel Kommandozeilenparameter und -argumente verarbeiten.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 14. Oktober 2006, 12:03

Dateien runterladen kannst du mit dem Modul urllib, Dateien ausführen mit subprocess und Dateien editieren geht mit file(). Für kopierarbeiten helfen dir die Module os und shutil.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
bennym
User
Beiträge: 36
Registriert: Freitag 13. Oktober 2006, 21:17
Kontaktdaten:

Samstag 14. Oktober 2006, 12:29

Vielen Dank @Y0gi und Leonidas !!!
Das wars was ich gesucht habe.

mfg benny
BlackJack

Samstag 14. Oktober 2006, 14:29

bennym hat geschrieben:
Ja. :twisted: :twisted:
Ich weis ja nicht, ob es dein humor ist Fragen nicht zu beantworten, aber kannst du mir denn nicht schreiben wie das geht?
'Tschuldigung, mein Humor ist manchmal ein bisschen nervig. Die meisten anderen Leute hier sind aber nett und hilfsbereit. :-)

Noch 'ne Anmerkung zu den Kommentaren: Die sollte man passend zum Quelltext einrücken. Sonst relativiert man den Vorteil der erzwungenen Einrückung bei Python, nämlich das man die Programmstruktur auf den ersten Blick erkennen kann, z.B. dass eine Schleife dann zuende ist, wenn die erste Zeile nicht mehr tiefer eingerückt ist als das ``for`` oder ``while``.
bennym
User
Beiträge: 36
Registriert: Freitag 13. Oktober 2006, 21:17
Kontaktdaten:

Samstag 14. Oktober 2006, 18:30

'Tschuldigung, mein Humor ist manchmal ein bisschen nervig. Die meisten anderen Leute hier sind aber nett und hilfsbereit. Smile :)
Lol.Dann bin ich ja beruhigt. :D
Noch 'ne Anmerkung zu den Kommentaren: Die sollte man passend zum Quelltext einrücken. Sonst relativiert man den Vorteil der erzwungenen Einrückung bei Python, nämlich das man die Programmstruktur auf den ersten Blick erkennen kann, z.B. dass eine Schleife dann zuende ist, wenn die erste Zeile nicht mehr tiefer eingerückt ist als das ``for`` oder ``while``.
Werd ich mir angewoehnen.
Vielen Dank

mfg benny
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Samstag 14. Oktober 2006, 18:54

Zum Thema Anführungszeichen, schau dir mal die beisen Wiki Seiten an:
[wiki]Lange Zeilen im Sourcecode[/wiki]
[wiki]Daten in der Konsole ausgeben[/wiki]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 16. Oktober 2006, 09:55

bennym hat geschrieben:4. Kann ich die Schrift irgendwie einfaerben? (sodass dass die keywords zb. rot sind wenn das Script in der Bash ausgefuehr wird?
[wiki]Farbige Konsoleausgaben[/wiki] (Der Wiki-Eintrag muss evtl. noch fuer DOS/Windows erweitert werden. Siehe Diskussion.)
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 16. Oktober 2006, 12:04

Rebecca hat geschrieben:Der Wiki-Eintrag muss evtl. noch fuer DOS/Windows erweitert werden.
Ich hab was dazu geschrieben... Da ich aber da auch nicht so im Thema stecke, weiß ich nicht ob das so 100%tig richtig ist: Also wer es besser weiß...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten