Seite 1 von 1

pyInstaller und subprocess

Verfasst: Montag 27. April 2026, 17:20
von s0pply
Hallo zusammen,

mal wieder ich und zu einem Problem, wo google aktuell nicht weiterhelfen kann.
Mein Script, soll laut Befehl in sich selbst per subprocess im Hintergrund Starten.
normal per "python3 ./test.py" läuft es auch aber wenn ich dies in pyinstaller Onefile
umwandle, geht hier auf einmal nichts mehr.
Python Version: 3.10.12 (soll so sein)
pyinstaller Version: 6.19.0

hier mein Beispiel, was ich dafür Vorbereitet habe:

Code: Alles auswählen

#!/usr/bin/env python3

import time, os, sys
import subprocess as sp

if getattr(sys, "frozen", False):
    APPLICATION_PATH = os.path.dirname(sys.executable)
elif __file__:
    APPLICATION_PATH = os.path.dirname(__file__)

APPLICATION_PATH = os.path.normpath(APPLICATION_PATH)
SCRIPT_NAME = os.path.basename(__file__)

EXE = APPLICATION_PATH + "/" + SCRIPT_NAME

def zahler():
    I = 0
    for a in range(10):
        I += 1
        time.sleep(0.25)

def start():
    sp.Popen(
        [sys.executable, EXE, "nur_ein_test"],
        stdout=sp.DEVNULL,
        stderr=sp.DEVNULL
    )

if len(sys.argv) > 1:
    if sys.argv[1] == "--start":
        start()

    if sys.argv[1] == "nur_ein_test":
        zahler()

sys.exit(0)
Dachte zuerst es liegt an den Path oder am Script Name oder liegt es daran, das die Datei im tmp Ordner ausgeführt wird
und sich selbst nicht doppelt ausführen kann.
Oder muss da eine weiter Datei mit rein die das Script aufrufen könnte aber es muss mit Impot dann laufen...

Gruß

Re: pyInstaller und subprocess

Verfasst: Montag 27. April 2026, 17:42
von __blackjack__
@s0pply: Was heisst „geht nichts mehr“ konkret?

Ein paar strategische `print()`-Ausgaben und/oder das entfernen der Umleitung von Ausgaben nach DEVNULL könnten Erkenntnisse bringen.

Re: pyInstaller und subprocess

Verfasst: Montag 27. April 2026, 20:07
von imonbln
Es besteht die Möglichkeit, dass /tmp mit noexec gemountet ist; dann kann der Subprocess es unter Umständen nicht starten. Wie schon @__blackjack__ sagte: Ein paar Debug-Prints oder Breakpoints an den richtigen Stellen können helfen.

Abgesehen davon ist es sicherheitstechnisch eine bescheidene Idee, etwas mit subprocess zu starten, das im Temp-Ordner liegt. Normalerweise kann dort jeder schreiben, und wenn das System nicht entsprechend gehärtet ist, könnte ein Angreifer dein Programm gegen eine evil.bin austauschen, welche dann im Kontext deines Skripts ausgeführt wird.

Was willst du eigentlich erreichen? Warum müssen bei dir Skripte andere Skripte aufrufen und Werte übergeben? Vielleicht beschreibst du uns, was deine Idee ist, eventuell findet die Community eine bessere Lösung als Skripte, die sich gegenseitig via subprocess starten müssen

Re: pyInstaller und subprocess

Verfasst: Dienstag 28. April 2026, 11:24
von __blackjack__
@imonbln: Dann könnte das eigentliche Programm doch schon nicht starten. PyInstaller entpackt doch alles nach `/tmp/`.

Es reicht übrigens schon die Umleitung(en) nach DEVNULL zu entfernen um eine Fehlermeldung zu sehen, der man dann weiter nachgehen kann.

Ich finde die Konstruktion auch komisch. Es kann Gründe geben mehr als einen Prozess mit dem ”gleichen” Code laufen zu lassen. Das würde ich dann aber nicht selber basteln, sondern `multiprocessing` oder `concurrent.futures` dafür verwenden.