Seite 1 von 1
Befehl aus Python in CMD ausführen
Verfasst: Sonntag 1. März 2020, 18:12
von Luggi
Hi,
ich versuche jetzt schon seid längerem einen befehl aus einem Python Programm in die Windows CMD zu übergeben und dort auszuführen.
Unter UNIX ist das alles kein Problem, ich brauche diese Funktion aber unter Windows

.
Ich denke das das eigentlich mit subprocess gegen sollte.
Bisher hatte ich die befehle in eine Bash datei geschrieben und die dann ausgeführt, das macht aber für 2 befehle nicht wirklich sinn.
Vielleicht kann mir ja einer von euch helfen, ich komme gerade einfach irgendwie nicht weiter.
Schon mal vielen Dank
Re: Befehl aus Python in CMD ausführen
Verfasst: Sonntag 1. März 2020, 18:20
von sparrow
Wie machst du es dnen unter UNIX? Denn eigentlich sollte es da keinen Unterschied geben. Subprocess verhält sich auf allen Systemen gleich.
Re: Befehl aus Python in CMD ausführen
Verfasst: Montag 2. März 2020, 00:58
von snafu
Am besten stellst du mal den exakten subprocess Aufruf hier rein. Dann lässt sich bestimmt mehr sagen.
Re: Befehl aus Python in CMD ausführen
Verfasst: Montag 2. März 2020, 10:16
von Luggi
Danke
Ich bin weitergekommen xD
Jetzt muss ich das nur noch in mein Programm einbauen.
Bleibt natürlich nicht bei dem Ping war aber ganz gut zum Testen
Code: Alles auswählen
import subprocess
test = subprocess.Popen(["ping","www.google.de"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = test.communicate()
status = test.wait()
print(output)
Soll dann später einen Anmeldung an einem Netzlaufwerk realisieren.
Code: Alles auswählen
acces= subprocess.Popen(["net use E: \\%SERVER%\laufwerkXY/USER:%user% %password% %NUOPT%"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = acces.communicate()
status = acces.wait()
Das funktioniert leider noch nicht aber bin schon mal weiter
Der Beitrag hat mir trotzdem geholfen
Also schon mal danke
Re: Befehl aus Python in CMD ausführen
Verfasst: Montag 2. März 2020, 10:50
von __deets__
Das Kommando ist auch so falsch angegeben. Du benutzt eine Liste, aber dann ist darin nur EIN String, mit ganz vielen Leerzeichen und Argumenten. Das ist ein Fehler. Da muss jedes Element des Aufrufs ein einzelnes Element der Liste sein, so wie du das beim ping ja auch korrekt gemacht hast.
Re: Befehl aus Python in CMD ausführen
Verfasst: Montag 2. März 2020, 10:52
von sparrow
Bei deinem Test hast du verstanden, dass die einzelnen Elemente des Kommandos auch einzeln Elemente der Liste sind, die subprocess übergeben werden.
In deinem zweiten Versuch tust du das dann einfach nicht mehr, sondern übergibst das komplette Kommando als einziges Element einer Liste. Das ist nicht richtig.
Re: Befehl aus Python in CMD ausführen
Verfasst: Montag 2. März 2020, 11:00
von Sirius3
Ich weiß nicht, woher Du die Environment-Variablen hast (vor allem %password% sollte man ja nicht so setzen), die mußt Du aber selbst auflösen, in Python, wenn Du mit subprocess arbeiten willst. Und natürlich jeden Parameter als eigenen Listeneintrag. Ich denke, zwischen XY und /USER fehlt da auch noch die Trennung.
Re: Befehl aus Python in CMD ausführen
Verfasst: Montag 2. März 2020, 11:03
von __blackjack__
Und die Umgebungsvariablen muss man natürlich auch selbst auflösen und einsetzen. Denn das wird ja nicht ”in” cmd.exe ausgeführt, sondern direkt. Was auch gut so ist, denn da ist nichts enthalten was wirklich die cmd.exe als Zwischenschritt benötigt. Und das ist unter Linux genau so. Da hätte das auch so nicht funktioniert.
In neuem Code sollte man auch `subprocess.run()` verwenden wenn man nicht tatsächlich ein `Popen`-Objekt braucht.
Re: Befehl aus Python in CMD ausführen
Verfasst: Dienstag 3. März 2020, 10:36
von __blackjack__
Der Aufruf müsste also ungefähr so aussehen (ungetestet):
Code: Alles auswählen
...
result = subprocess.run(
[
"net",
"use",
"E:",
fr"\\{os.environ['SERVER']}\laufwerkXY",
f"/USER:{os.environ['user']}",
os.environ("password"),
os.environ("NUOPT"),
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True,
)
...