Windows Subsystem Linux aus Python Skript heraus starten

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
DodgerTheRunner
User
Beiträge: 4
Registriert: Montag 23. Dezember 2019, 11:49

Hallo,

ich habe folgendes Problem:
ich bin eingefleischter Windows User und brauche für eine kleines Projekt ein Linux Tool.
Dafür habe ich die Windows Subsystem Linux Umgebung auf meinem Rechner eingerichtet.

Mein Skript soll nun an einem bestimmten Zeitpunkt die WSL Umgebung öffnen und einen vorher definierten Befehl ausführen.
Wenn ich ein einfaches cmd-Fenster öffne und den Befehl dort ausführe, funktioniert alles problemlos.
In Python habe ich nun die subprocess -Funktion eingesetzt.

Code: Alles auswählen

subprocess.run(["calc.exe"], shell=True)
funktioniert

Code: Alles auswählen

subprocess.run(["wsl.exe", "ocrmypdf"], shell=True)
funktioniert nicht.

Code: Alles auswählen

subprocess.run(["C:/Windows/System32/wsl.exe", "ocrmypdf"], shell=True)
funktioniert auch nicht.
Antwort vom System: die angegebene Datei konnte nicht gefunden werden

wsl.exe liegt im Windows/System32 Verzeichnis, genauso wie calc.exe.

Code: Alles auswählen

wsl ocrmypdf
im cmd-Fenster ausgeführt funktioniert auch.

Was mache ich falsch?

Gruß
Dodger
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

``shell=True`` und Liste als erstes Argument ist zumindest schon mal falsch. Das ``shell=True`` sollte man sowieso nicht setzen, solange man nicht ganz sicher eine Shell braucht, was in keinem der Beispiele der Fall ist.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
DodgerTheRunner
User
Beiträge: 4
Registriert: Montag 23. Dezember 2019, 11:49

ok, "shell=True" weggelassen.Geht trotzdem nicht.
In der Python-Shell kommt folgende Fehlermeldung:
Traceback (most recent call last):
Python Shell, prompt 2, line 1
# Used internally for debug sandbox under external interpreter
File "C:\Users\Familie\AppData\Local\Programs\Python\Python38-32\Lib\subprocess.py", line 489, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\Users\Familie\AppData\Local\Programs\Python\Python38-32\Lib\subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\Familie\AppData\Local\Programs\Python\Python38-32\Lib\subprocess.py", line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
builtins.FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Was sagt denn ein:

Code: Alles auswählen

where wsl.exe
in der Kommandozeile?
DodgerTheRunner
User
Beiträge: 4
Registriert: Montag 23. Dezember 2019, 11:49

Die Antwort lautet:
C:\Windows\System32\wsl.exe
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Und im Code

Code: Alles auswählen

subprocess.run(["C:/Windows/System32/wsl.exe",])
?
DodgerTheRunner
User
Beiträge: 4
Registriert: Montag 23. Dezember 2019, 11:49

Problem behoben:
wsl.exe ist eine 64-bit Applikation.
Mein Python war eine 32-Bit Applikation.
32-Bit Applikationen suchen irgendwie in einem anderen Verzeichnis...

Hab Python jetzt als 64-Bit Version installiert, jetzt geht alles...
Antworten