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
Befehl aus Python in CMD ausführen
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
Soll dann später einen Anmeldung an einem Netzlaufwerk realisieren.
Das funktioniert leider noch nicht aber bin schon mal weiter
Der Beitrag hat mir trotzdem geholfen
Also schon mal 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)
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()
Der Beitrag hat mir trotzdem geholfen
Also schon mal danke
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.
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.
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.
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.
- __blackjack__
- User
- Beiträge: 13117
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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.
In neuem Code sollte man auch `subprocess.run()` verwenden wenn man nicht tatsächlich ein `Popen`-Objekt braucht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13117
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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,
)
...
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman