Hallo zusammen - ich hoffe hier ist jemand der python versteht
ich möchte über ein python script einen rechner im netzwerk runterfahren
das mache ich mit shutdown -s -f -t 0 -m \elactic
das jetzt aus nem pythonscript…
ich habe gelesen, dass ich das mit os.system mache
also habe ich folgendes geschrieben
import os
os.system("shutdown -s -f -t 0 -m \\elactic")
da öffnet sich auch die dosbox, schließt sich wieder und es passiert nichts -.-
das os.system funktioniert an sich (ich habs mit os.system(„msconfig“)probiert)
die sache mit subprocess.popen hab ich noch nicht so ganz verstanden
ich benutze windows vista und python 2.6
hat irgendjemand ne idee woran das liegt bzw wie ich das löse?
lg und frohe ostern
johannes
Hi elactic,
ich hab zwar keine Ahnung von Python, aber da das irgendein DOS-Befehl ist könnte es daran liegen das Windows Vista nicht mehr auf DOS basiert.
Lg der einzigware
Hi elactic,
ich hab zwar keine Ahnung von Python, aber da das irgendein
DOS-Befehl ist könnte es daran liegen das Windows Vista nicht
mehr auf DOS basiert.
Lg der einzigware
ok dos war falsch wie nennt man die befehle denn elegant, die in die commandozeile eingegeben werden?^^
Hast du auch probiert, ob der shutdown-Befehl so funktioniert?
ja natürlich, so mach ich den übder das netzwerk immer aus… deshalb überleg ich nun ob die parameter irgendwie anders übergeben werden müssen…
aber gesagt… keine ahnung
wunderbar, hat funktioniert =)
sagst du mir auch warum?^^
das hab ich nicht ganz verstanden warum das jetzt mir 4 backslashes klappt…
ich dachte das wird jetzt praktisch als eine art string an die kommandozele übergeben, deshab hätte ich gedacht die syntax müsse die selbe sein
wunderbar, hat funktioniert =)
sagst du mir auch warum?^^
Wie übergibst du einer Variablen eine Zeichenkette, die Gänsefüßchen " enthält?
Variable = "Dies ist ein "-GänsefüßchenTest"
Das dürfte aus offenkundigen Gründen scheitern - das zweite " wird nicht als Teil des Strings erkannt, sondern als dessen Begrenzer. Python wird einen Syntaxfehler anmeckern. Um in der Zeichenkette ein " unterzubringen, musst du es maskieren bzw. als Teil der Zeichenkette markieren. Dafür wird der Backslash verwendet:
Variable = "Dies ist ein \"-GänsefüßchenTest"
Wenn aber der Backslash dazu dient, Sonderzeichen in Strings zu maskieren, was macht man denn, wenn man einen Backslash braucht? Ganz einfach, man maskiert ihn - mit einem Backslash. Für die Darstellung eines einfachen Backslashs muss man also einen doppelten Backslash angeben. Da der Backslash immer nur genau ein Zeichen maskiert, müssen für die Darstellung eines doppelten Backslashs daher beide einzen maskiert werden - macht einen Quadrupel-Backslash \\.
ein andere Variante (zu den Backslash-Verdoppeln) wäre, vor den string ein r zu schreiben, also popen(r"shutdown … \elactic"). Das r kommt von raw string und die werden gerne für reguläre Ausdrücke verwendet, wo man viele Backslashes benötigt…
ein andere Variante (zu den Backslash-Verdoppeln) wäre, vor
den string ein r zu schreiben, also popen(r"shutdown …
\elactic"). Das r kommt von raw string und die werden gerne
für reguläre Ausdrücke verwendet, wo man viele Backslashes
benötigt…
Naja, die Backslashes sind eher selten das Problem, an die denkt man meist noch. Aber wer hat schon immer die ganze Liste der zu maskierenden Zeichen präsent! Muß das % maskiert werden? Wie sieht’s mit dem @ aus oder dem &? Und warum zur Hölle unterscheidet sich die Liste für Python von der für Perl?
Da kann dann ein raw string schon ganz nützlich sein.