115129
08.01.2016
7337
9
0
Py2exe - Pyton-Script in .exe wandeln mit Übergabe eines Arguments
Hallo zusammen,
ich nutze py2exe um einen bestehenden Python-Source-Code in Windows ausführbar zu machen.
Generell funktioniert mein Vorhaben, die Setup.exe wird ohne jegliche Fehler durch py2exe erzeugt.
Nun aber möchte ich dem Python-Script ein Argument mit übergeben, welches z.B. ein bestimmter Modus innerhalb des Skripts startet.
Mein Python-Script heißt: Script.py
Die zu erzeugende .exe soll lauten: Setup.exe
Führe ich wie folgt das "Script.py" über die Eingabeaufforderung aus, funktioniert alles wie es soll:
Mit py2exe wird zwar die gewünschte Setup.exe erzeugt, jedoch ohne Argument (in diesem Beispiel PM).
Wie bzw. was müsste ergänzt werden?
Vielen Dank für alle Hilfestellungen.
Gruß,
Blattlaus
ich nutze py2exe um einen bestehenden Python-Source-Code in Windows ausführbar zu machen.
Generell funktioniert mein Vorhaben, die Setup.exe wird ohne jegliche Fehler durch py2exe erzeugt.
Nun aber möchte ich dem Python-Script ein Argument mit übergeben, welches z.B. ein bestimmter Modus innerhalb des Skripts startet.
Mein Python-Script heißt: Script.py
Die zu erzeugende .exe soll lauten: Setup.exe
Führe ich wie folgt das "Script.py" über die Eingabeaufforderung aus, funktioniert alles wie es soll:
c:\python27\Python Script.py PM
Mit py2exe wird zwar die gewünschte Setup.exe erzeugt, jedoch ohne Argument (in diesem Beispiel PM).
from distutils.core import Setup
import py2exe
Setup(windows=['Script.py'])
Wie bzw. was müsste ergänzt werden?
Vielen Dank für alle Hilfestellungen.
Gruß,
Blattlaus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 292554
Url: https://administrator.de/contentid/292554
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
für die Frage der Auswertung eines Aufrufs-Arguments ist m.E. die Frage "windows/console" unerheblich - sie müsste in jedem Falle passieren (bloß dass man es im Beispiel des Kollegen @colinardo in der Konsole nicht sieht ). Anderes Beispiel:
(Wird die daraus erzeugte EXE mit Argument aufgerufen, wird dieses in eine Datei "parameters.txt" geschrieben.)
Hast Du allerdings den Plan (das geht aus der Frage nicht recht hervor), ein Python-Skript (das Parameter auswertet) in eine EXE-Datei umzuwandeln, die (ohne Parameter aufgerufen) das Skript (mit Parameter) ausführt, ist der Compiler vermutlich die falsche Stelle, das zu implementieren. Dazu könntest Du evtl. im Skript ein Konstrukt aus argparse mit "default"-Schalter verwenden. Etwa
(Die daraud erzeugte EXE würde -mit Argument aufgerufen- dieses in die Datei "parameters.txt" schreiben; ohne Argumente schreibt es "PM" in die Datei.)
Gruß,
Gersen
für die Frage der Auswertung eines Aufrufs-Arguments ist m.E. die Frage "windows/console" unerheblich - sie müsste in jedem Falle passieren (bloß dass man es im Beispiel des Kollegen @colinardo in der Konsole nicht sieht ). Anderes Beispiel:
import sys
if len(sys.argv) > 1:
f = open('parameters.txt', 'w')
f.write(sys.argv[1])
f.close()
Hast Du allerdings den Plan (das geht aus der Frage nicht recht hervor), ein Python-Skript (das Parameter auswertet) in eine EXE-Datei umzuwandeln, die (ohne Parameter aufgerufen) das Skript (mit Parameter) ausführt, ist der Compiler vermutlich die falsche Stelle, das zu implementieren. Dazu könntest Du evtl. im Skript ein Konstrukt aus argparse mit "default"-Schalter verwenden. Etwa
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('a', nargs='?', type=str, default='PM')
args = parser.parse_args()
f = open('parameters.txt', 'w')
f.write(args.a)
f.close()
Gruß,
Gersen
bloß dass man es im Beispiel des Kollegen @colinardo in der Konsole nicht sieht
Doch sieht man wenn man die exe in der Konsole den Parameter übergibt. War ja auch nur ein simples Beispiel für die Ausgabe der Parameter und dem Test das es damit funktioniert.Grüße Uwe
Hallo,
Nach meinem Verständnis wird bei diesem Vorgang keine Datei "Setup.exe" erstellt, sondern ein Verzeichnis "dist", in welchem eine Datei "Script.exe" generiert wird.
Diese kann mit den gleichen Argumenten ausgeführt werden wie die Script.py.
Wobei bei mir das Kompilieren nur funktioniert, wenn innerhalb der Datei "Setup.py" das importierte Modul sowie der Aufruf klein geschrieben werden:
Oder?
@colinardo:
Sorry, hatte mich ungenau ausgedrückt. Dein Beispiel, mit "Setup(console=['Script.py'])" compiliert, erzeugt natürlich die Ausgaben. Mit "Setup(windows=['Script.py'])" compiliert, erzeugt es beim Aufruf die Ausgaben nicht. Aber nicht, weil die Parameter nicht ausgewertet werden - sondern, weil die Konsole als Grundlage für die Ausgabe fehlt. Ich hoffe, ich habe mit der Erklärung die Unklarheit nicht noch vergrößert...
Gruß,
Gersen
Zitat von @115129:
Laut py2exe`s Anleitung folgendermaßen; Es soll eine Datei Names Setup.ty erstellt und folgender Code hineinkopiert werden:
Dann per Eingabeaufforderung folgendes ausführen:
Soweit sogut, meine Setup.exe wurde erstellt, allerdings ohne Funktion, da die zu übergebende(n) Argumente(n) für die jeweilige .exe fehlen.
Laut py2exe`s Anleitung folgendermaßen; Es soll eine Datei Names Setup.ty erstellt und folgender Code hineinkopiert werden:
> from distutils.core import Setup
> import py2exe
>
> Setup(windows=['Script.py'])
>
Dann per Eingabeaufforderung folgendes ausführen:
python Setup.py py2exe
Soweit sogut, meine Setup.exe wurde erstellt, allerdings ohne Funktion, da die zu übergebende(n) Argumente(n) für die jeweilige .exe fehlen.
Nach meinem Verständnis wird bei diesem Vorgang keine Datei "Setup.exe" erstellt, sondern ein Verzeichnis "dist", in welchem eine Datei "Script.exe" generiert wird.
E:\Python27\projects>e:\Python27\python.exe Setup.py py2exe
running py2exe
creating E:\Python27\projects\dist
...
copying e:\Python27\lib\site-packages\py2exe\run_w.exe -> E:\Python27\projects\dist\Script.exe
Wobei bei mir das Kompilieren nur funktioniert, wenn innerhalb der Datei "Setup.py" das importierte Modul sowie der Aufruf klein geschrieben werden:
from distutils.core import setup
import py2exe
setup(windows=['Script.py'])
Oder?
@colinardo:
Sorry, hatte mich ungenau ausgedrückt. Dein Beispiel, mit "Setup(console=['Script.py'])" compiliert, erzeugt natürlich die Ausgaben. Mit "Setup(windows=['Script.py'])" compiliert, erzeugt es beim Aufruf die Ausgaben nicht. Aber nicht, weil die Parameter nicht ausgewertet werden - sondern, weil die Konsole als Grundlage für die Ausgabe fehlt. Ich hoffe, ich habe mit der Erklärung die Unklarheit nicht noch vergrößert...
Gruß,
Gersen
Zitat von @115129:
Dachte man kann das Pytonsript "Script.py" mit py2exe in "Script.exe" samt dem Argument "PM" konvertieren.
Somit könnte die "Script.exe" per doppelklick ausgeführt werden ohne Eingabeaufforderung.
Geht das überhaupt wie ich mir das vorstelle?
Öhm wieso so umständlich ? Definiere im Skript eine Variable und verwende den Inhalt dieser wenn ein bestimmter externer Parameter leer ist...einfache IF-Anweisung.Dachte man kann das Pytonsript "Script.py" mit py2exe in "Script.exe" samt dem Argument "PM" konvertieren.
Somit könnte die "Script.exe" per doppelklick ausgeführt werden ohne Eingabeaufforderung.
Geht das überhaupt wie ich mir das vorstelle?
Dachte man kann das Pytonsript "Script.py" mit py2exe in "Script.exe" samt dem Argument "PM" konvertieren.
Also doch, wie ich oben schon vermutete...Somit könnte die "Script.exe" per doppelklick ausgeführt werden ohne Eingabeaufforderung.
Geht das überhaupt wie ich mir das vorstelle?
Theoretisch ja, aber ich glaube, das willst Du Dir nicht antun...Geht das überhaupt wie ich mir das vorstelle?
argparse mit default-Schalter (wie oben) wäre eine Möglichkeit im Skript.
Noch simpler: Mach doch eine Verknüpfung zur EXE, in derem Aufruf Du den Parameter einträgst.