Python mit linux und wine (String escapen)

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
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

Hallo, ich versuche gerade ein Windows Spiel mit wine zu öffnen.

Der Python Code ist zwar einfach:

Code: Alles auswählen

import subprocess

## bash command
## wine '/home/stu/.wine/drive_c/Program Files (x86)/Deep Silver/Risen/bin/Risen.exe'

## das habe ich probiert:
path = "'wine /home/stu/.wine/drive_c/Program Files (x86)/Deep Silver/Risen/bin/Risen.exe'"
path2 = "'wine\ /home/stu/.wine/drive_c/Program\ Files\ (x86)/Deep\ Silver/Risen/bin/Risen.exe'"

subprocess.run(path2, shell=True)
Dennoch bekomme ich es nicht zum laufen. Wie muss ich richtig escapen?

Und gibt es vielleicht auch eine allgemein bessere Art so welche Probleme zu handeln, oder sich funktionierende Pfade ausgeben bzw. berechnen zu lassen?

Mfg djevil
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@djevil: subprocess.run gibt es nicht, Du meinst vielleicht subprocess.call. shell=True sollte eigentlich nie nötig sein, wenn man nicht explizit Fähigkeiten der Shell braucht. call braucht dann eine Liste, womit klar wird, wie sich die Parameter aufteilen, ohne dass man escapen muß:

Code: Alles auswählen

path = "/home/stu/.wine/drive_c/Program Files (x86)/Deep Silver/Risen/bin/Risen.exe"
subprocess.call(['wine', path])
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

Hi, Sirius3,

subprocess.run ist lediglich Python3.5.
subprocess.call(['wine', 'notepad.exe'])
funktioniert.

Code: Alles auswählen

    path = "/home/stu/.wine/drive_c/Program Files (x86)/Deep Silver/Risen/bin/Risen.exe"
    subprocess.call(['wine', path])
Mach aber immer noch Probleme,
ausser, wenn man subprocess.call(['wine', 'Risen.exe']) im selben Ordner startet.

MFG
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was sagt denn os.path.exists(path)? Und wenn das geht, kannst du mit os.chdir(os.dirname(path)) erstmal in das bin-Verzeichnis wechseln. Falls das klapp dann koenntest du auch noch statt os.chdir zu benutzen (und damit deinen Python-Prozess zu veraendern) stattdessen das working-directory mittels des cwd-Parameters uebergeben.
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

Yupp, das geht schonmal ;)

Wie geht es denn ohne os.chdir?

MFG djevil
BlackJack

@djevil: Mit dem `cwd`-Argument von `call()`.
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

Super, dann hab ich's ja bald zusammen,

schönen Dank euch allen!

Jetzt muss ich los..

MFG d
Antworten