Ich habe ein Python-Skript in Blender, wo es
hat subprocess.call(os.path.abspath('D:/Test/run-my-script.sh'),shell=True)
gefolgt von vielen anderen Codes, die von diesem Shell-Skript abhängen, um zu beenden. Was passiert ist, dass es nicht auf das Ende wartet, ich weiß nicht warum? Ich habe sogar versucht, Popen
anstelle von call
zu verwenden, wie gezeigt:
und ich habe versucht, die Kommunikation zu verwenden, aber es hat immer noch nicht funktioniert:
%Vor% Dieses Shell-Skript funktioniert großartig auf MacOS (nach dem Ändern von Pfaden) und wartet, wenn subprocess.call(['sh', '/userA/Test/run-my-script.sh'])
aber auf Windows ist das, was passiert, ich führe das unten stehende Python-Skript in Blender aus, sobald es in die Unterprozess-Zeile Git bash
kommt und das Shell-Skript ausführt, während Blender nicht darauf wartet, dass es fertig ist, druckt es Hello
in seiner Konsole, ohne darauf zu warten, dass die Git Bash beendet wird. Irgendwelche Hilfe?
Sie können subprocess.call
verwenden, um genau das zu tun.
Unterprozess. Aufruf ( Argumente, *, stdin = Keine, stdout = Keine, stderr = Keine, Shell = False, timeout = Keine )
Führen Sie den von args beschriebenen Befehl aus. Warten Sie, bis der Befehl abgeschlossen ist, und geben Sie das Rückgabecodeattribut zurück.
Bearbeiten : Ich glaube, ich habe eine Ahnung davon, was vor sich geht. Der Befehl funktioniert auf Ihrem Mac, weil Macs, glaube ich, Bash out of the box unterstützen ( zumindest etwas funktionell Entsprechendes ), während es unter Windows Ihren Versuch sieht, eine ".sh" -Datei auszuführen und stattdessen feuert up Git Bash was ich vermute, führt ein paar Gabeln beim Start.
Da Python denkt , dass Ihr Skript fertig ist, ist die PID weg.
Wenn ich du wäre, würde ich das tun:
tempfile
Modul. Hoffentlich macht das Sinn.
Verwenden Sie subprocess.Popen und Popen.wait :
%Vor%Sie können stattdessen auch check_call () verwenden von Popen.
Tags und Links python shell subprocess git-bash blender