Dos Befehle mit Python

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

Guten Tag,

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?^^

Konsolenbefehle oder WindowsAPIbefehle.
Lg der einzigware

das os.system funktioniert an sich (ich habs mit
os.system(„msconfig“)probiert)

Hast du auch probiert, ob der shutdown-Befehl so funktioniert?

die sache mit subprocess.popen hab ich noch nicht so ganz
verstanden

Die Syntax ist die gleiche

from subprocess import Popen
Popen("shutdown -s -f -t 0 -m \\elactic")

HTH

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

danke für die schnell antwort =)
lg
johannes

deshalb überleg ich nun ob die parameter irgendwie anders
übergeben werden müssen…

In der Tat. Du verwendest den Backslash, und der wird als Escape-Zeichen verwendet; du musst ihn also maskieren:

Popen(„shutdown -s -f -t 0 -m \\elactic“)

Gruß

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

aber danke erstmal für den tipp :smiley:
lg
johannes

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 \\.

Gruß

aha ok das man in python mit \ maskiert wusste ich nicht, dann ist es klar, danke =)

Popen(„shutdown -s -f -t 0 -m \elactic“)

Hallo,

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…

grüße, guidot

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.

Gruß