Frage zu subprocess
Verfasst: Sonntag 19. April 2020, 12:29
Servus,
ich hoffe ich bin hier unter allgemeine Fragen mit meiner Frage richtig und hoffe ich benutze die Code-Funktion hier richtig. Falls nicht bitte etwas Nachsicht, da das hier mein erster Post ist.
Ich möchte mit Hilfe von Python ein Programm (OpenSCAD, ohne GUI) öffnen, welches dann eine Datei einliest (.csg) und diese in .stl konvertiert. Das funktioniert bei mir soweit auch alles, allerdings lese ich zur Zeit eine Batch-Datei über das os-Modul ein.
Kurz zur Erklärung: mit "openscad -o" wird OpenSCAD ohne GUI geöffnet und "C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\test.stl " gibt an, dass test.csg im angegebenen Pfad (C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\test.csg) unter dem angegebenen Pfad in test.stl konvertiert werden soll. Aufrufen tu ich die Batch-Datei dann mit:
Nun möchte ich allerdings nicht mehr eine externe Batch-Datei haben, sondern das einfach direkt im Pythonskript erledigen. Ich habe gelesen, dass das sowohl über das os-Modul als auch über das subprocess-Modul funktioniert. Anscheinend ist aber subprocess neuer, also habe ich beschlossen das zu verwenden. Wie man das Programm öffnet habe ich auch schon gegoogelt und ich denke das passt auch. Zumindest wirft mir Python keine Fehlermeldung.
Nun will ich allerdings die Konvertierung machen und bekomme es einfach nicht hin. Ich weiß nicht so recht, wie ich Python das mitteilen soll. Ich habe es folgendermaßen probiert, bekomme jedoch immer einen Fehler was die Codierung angeht. Ich hab es schon mit decodieren versucht, aber bei dem Thema kenne ich mich leider viel zu wenig aus und habe es auch nicht hinbekommen bzw. bin mir auch nicht sicher, ob das da wirklich überhaupt notwendig ist.
Meine Versuche, die nicht funktionieren:
und
Ah die Fehlermeldung könnte ich natürlich auch noch dazu tun:
Sorry für den langen Text und hoffe, dass mir irgendwer weiter helfen kann. Vielen Dank schon mal!! 
Liebe Grüße
Michi
ich hoffe ich bin hier unter allgemeine Fragen mit meiner Frage richtig und hoffe ich benutze die Code-Funktion hier richtig. Falls nicht bitte etwas Nachsicht, da das hier mein erster Post ist.

Ich möchte mit Hilfe von Python ein Programm (OpenSCAD, ohne GUI) öffnen, welches dann eine Datei einliest (.csg) und diese in .stl konvertiert. Das funktioniert bei mir soweit auch alles, allerdings lese ich zur Zeit eine Batch-Datei über das os-Modul ein.
Code: Alles auswählen
@echo off
cd C:\Program Files\OpenSCAD
openscad -o C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\test.stl C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\test.csg
Code: Alles auswählen
os.system(r'C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\OpenSCAD.bat')
Code: Alles auswählen
subprocess.Popen([r'C:\Program Files\OpenSCAD\openscad', '-o'], stdout=subprocess.PIPE)
Meine Versuche, die nicht funktionieren:
Code: Alles auswählen
subprocess.Popen([r'C:\Program Files\OpenSCAD\openscad', '-o', 'C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\test.stl C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\test.csg'], stdout=subprocess.PIPE)
Code: Alles auswählen
#subprocess.Popen([r'C:\Program Files\OpenSCAD\openscad', '-o C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\test.stl C:\Users\micha\Desktop\LCM\K12306_STIWA_OpenSCAD\test.csg'], stdout=subprocess.PIPE)
Code: Alles auswählen
runfile('C:/Users/micha/Desktop/LCM/K12306_STIWA_OpenSCAD/OpenSCAD_oeffnen.py', wdir='C:/Users/micha/Desktop/LCM/K12306_STIWA_OpenSCAD')
Traceback (most recent call last):
File "C:\Users\micha\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3343, in run_code
self.showtraceback(running_compiled_code=True)
File "C:\Users\micha\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2026, in showtraceback
self.showsyntaxerror(filename, running_compiled_code)
File "C:\Users\micha\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2088, in showsyntaxerror
stb = self.SyntaxTB.structured_traceback(etype, value, elist)
File "C:\Users\micha\Anaconda3\lib\site-packages\IPython\core\ultratb.py", line 1420, in structured_traceback
newtext = linecache.getline(value.filename, value.lineno)
File "C:\Users\micha\Anaconda3\lib\linecache.py", line 16, in getline
lines = getlines(filename, module_globals)
File "C:\Users\micha\Anaconda3\lib\linecache.py", line 47, in getlines
return updatecache(filename, module_globals)
File "C:\Users\micha\Anaconda3\lib\linecache.py", line 137, in updatecache
lines = fp.readlines()
File "C:\Users\micha\Anaconda3\lib\codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 264: invalid continuation byte

Liebe Grüße
Michi