ProcessPoolExecutor in exe

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
overload
User
Beiträge: 13
Registriert: Dienstag 6. April 2021, 13:41

Servus zusammen,

ich habe folgendes Problem, ich arbeite mit aktuell mit 3 python Skripten, dem python_starter (Hauptprogramm was geöffnet wird) und in diesem Programm wähle ich mit einer Eingabe "1" oder "2" aus welche ich der anderen beiden Skripte ich starten möchte.

Alles schön alles gut, mit der .py Datei funktioniert alles super. Packe ich das ganze allerdings in eine .exe mit auto-py-to-exe und starte mein Programm, startet dieses auch noch Problemlos. Wenn ich in der .exe Datei nun meinen Input zum auswählen meines Skriptes eingebe und Enter drücke, Printen mir das Programm die starter Datei noch 8x aus.

Code: Alles auswählen

#!/usr/bin/python3
import restocks_lister
import restocks_final
import pyfiglet
from termcolor import colored
from multiprocessing import freeze_support
import os
os.system("color")

def starter():
    ascii_banner = pyfiglet.figlet_format("overload")
    print(colored(ascii_banner, "blue"))
    
    print(colored("  1. Start Restocks Lister", "blue"))
    print(colored("  2. Start Restocks Price checker", "blue"))
    print("")
    starter.eingabe = input(colored("Choose youre mode: ", "red"))


if __name__ == "__main__":
    starter()
    freeze_support
    clear = lambda: os.system('cls')
    clear()
    if starter.eingabe == "1":    
        restocks_lister.main()
    elif starter.eingabe == "2":
        restocks_final.main()
    

    input("Press enter to exit.")
Das ist der Code mit welchen ich meine Skripte starte. Die Funktionen der beiden Programme, welche ich damit auswähle sehen wie folgt aus:

Code: Alles auswählen

def main():
    with concurrent.futures.ProcessPoolExecutor() as executor:
        executor.map(skript_lister, url, price, size)

Code: Alles auswählen

def main():
    with concurrent.futures.ProcessPoolExecutor() as executor:
        results = executor.map(skript_price_checker, url, brick_price, size, product_id)
Gibt es da noch irgendeinen Trick den ich anwenden muss, damit er mir nicht noch einmal meine starter() function Printet? Dies geschieht ja schließlich nur in der .exe und nicht in der .py Datei.

Vielen Dank schon einmal für eure Antworten :D !
Benutzeravatar
__blackjack__
User
Beiträge: 14019
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@overload: Das mit `freeze_support` sieht falsch aus, denn so wie es da steht, bewirkt das offensichtlich einfach gar nichts. Muss man das vielleicht aufrufen? Und eventuell auch *bevor* man irgend was anderes macht?
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
overload
User
Beiträge: 13
Registriert: Dienstag 6. April 2021, 13:41

__blackjack__ hat geschrieben: Dienstag 7. September 2021, 00:52 @overload: Das mit `freeze_support` sieht falsch aus, denn so wie es da steht, bewirkt das offensichtlich einfach gar nichts. Muss man das vielleicht aufrufen? Und eventuell auch *bevor* man irgend was anderes macht?
Tatsache, ich habe erstens die () vergessen und zweitens habe ich es nun über starter() gesetzt und jetzt hat es funktioniert. Danke für den denk Anstoß, ist dann doch schon etwas spät fürs weiterarbeiten ;).

Eine schöne gute Nacht und vielen Dank!
Sirius3
User
Beiträge: 18260
Registriert: Sonntag 21. Oktober 2012, 17:20

Funktionsnamespaces sind kein Ersatz für Rückgabewerte.
os.system sollte man nicht benutzen.
`print` ohne Argument macht das selbe wie die Ausgabe eines leeren Strings.

Code: Alles auswählen

#!/usr/bin/python3
import subprocess
from multiprocessing import freeze_support
from termcolor import colored
import pyfiglet
import restocks_lister
import restocks_final

def menu():
    print(colored(pyfiglet.figlet_format("overload"), "blue"))
    print(colored("  1. Start Restocks Lister", "blue"))
    print(colored("  2. Start Restocks Price checker", "blue"))
    print()
    return input(colored("Choose youre mode: ", "red"))

def main():
    freeze_support()
    subprocess.run(["color"])
    choice = menu()
    subprocess.run(["cls"])
    if choice == "1":
        restocks_lister.main()
    elif choice == "2":
        restocks_final.main()

if __name__ == "__main__":
    main()
Antworten