Mein Ziel ist es, eine kleine Website zu haben, auf der ich meine .bin-Datei ablegen und das Skript + MAME damit umgehen lassen kann Ruhe im Hintergrund – dann gib mir meine .wav-Datei zurück, um sie herunterzuladen.
Und der gesamte Prozess funktioniert einwandfrei, mit dem winzigen kleinen Problem, dass MAME einfach nicht mit dem Python-Unterprozess funktioniert.
Der Python-Code, den ich zum Starten von MAME verwende, ist:
Code: Select all
process = subprocess.Popen(
[
'/path/to/mame',
'channelf',
'-rompath', '/path/to/mame/roms/',
'-cart', '/path/to/file.bin',
'-window',
'-seconds_to_run', str(play_length),
'-nothrottle',
'-ui', 'simple',
'-sound', 'none',
'-video', 'none',
'-wavwrite', '/path/to/file/render.wav',
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
Der exakt gleiche Befehl wird in der Shell auf der anderen Seite ausgeführt Hand funktioniert ohne Probleme (das Arbeitsverzeichnis spielt keine Rolle, da ich nur vollständige Pfade verwende, aber ich habe auch relative Pfade aus meinem Python-Verzeichnis ausprobiert – das gleiche Ergebnis).
Code: Select all
# /path/to/mame channelf -rompath /path/to/mame/roms/ -cart /path/to/file.bin -window -seconds_to_run 240 -nothrottle -ui simple -sound none -video none -wavwrite /path/to/file/render.wav
pci id for fd 7: 1b36:0100, driver (null)
MESA-LOADER: failed to open qxl: /snap/mame/4284/gnome-platform/usr/lib/x86_64-linux-gnu/dri/qxl_dri.so: cannot open shared object file: No such file or directory (search paths /snap/mame/4284/gnome-platform/usr/lib/x86_64-linux-gnu/dri, suffix _dri)
pci id for fd 8: 1b36:0100, driver (null)
kmsro: driver missing
Average speed: 7242.29% (239 seconds)
Ich habe online keine Ressourcen zu diesem Thema gefunden Ausgabe. Die Fehlermeldung scheint von snapd zu stammen und nicht von MAME selbst, aber alle Online-Ergebnisse beziehen sich nicht auf Python-Unterprozesse. Hat jemand schon einmal so etwas probiert?
Ich frage mich im Grunde nur, welcher Unterschied zwischen Shell und Unterprozess dazu führen könnte. Und im Idealfall, wie ich das Problem beheben kann.