argparse und Python3

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
KRo
User
Beiträge: 6
Registriert: Freitag 9. August 2019, 08:39

Hallo Forum,

ich habe ein Python Script geschrieben, dass zur Auswertung der mitgegebenen Argument argparse benutzt. das funktioniert auch soweit ganz gut.

Seit dem Update auf Python3 beobachte ich, dass ich dieses Script jetzt explizit mit "python3 scrip.py <argumente>" starten muss. Vorher reichtes "script.py <argumente>". Interessanterweise kann ich andere Scripte, die argparse nicht nutzen, auch weiterhin unter Python3 in der einfachen Form starten - andere importierte Module scheinen keinen Einfluss zu haben.

Gibt es einen Grund für dieses Verhalten? Kann ich es ändern? Ist argparse incompatibel mit Python3?

Ciao,
KRo
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Was passiert denn, wenn Du nur mit `script.py <argumente>` startest? Fehlermeldung?
KRo
User
Beiträge: 6
Registriert: Freitag 9. August 2019, 08:39

es wird das usage von argparse angegeben und zwar mit den Parametern/Options die ich definiert habe. Kein Backtrace; der Fehler bezieht sich darauf, dass die Argumente nicht stimmen würden (die selbe Zeile mit python3 davor tut was sie soll.

Code: Alles auswählen

\Python>Preprocess_T19.py blah
usage: Preprocess_T19.py [-h] [--list-all-setnames] [-l] [-s SET_LIST]
                         [-m MEMBRANE_LIST]
                         [--membrane-list-file MEMBRANE_LIST_FILE]
                         [-i INCREMENT]
                         filename [filename ...]
Preprocess_T19.py: error: the following arguments are required: filename
mit oder ohne den Parameter "blah".


Auch daher mein gedanke, dass das mit argparse zu tun hat.

Ciao,
KRo
KRo
User
Beiträge: 6
Registriert: Freitag 9. August 2019, 08:39

Nachtrag: ich habe einen Shebang im Script:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
Ausgeführt wird es aber auf Windows 10; ich weiß nicht, ob der da ausgewertet wird. Ich kann das später auch nochmal unter Linux testen.

Ciao,
Kro
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Leg doch mal ein Script an, dass dir nur anzeigt, welche Argumente beim Aufruf übergeben wurden.
Gerade unter WIndows halte ich wenig davon, ein Script ohne Angabe des Interpreters aufzurufen. In der Standard-Installation von python.org gibt es, soweit ich weiß, auch gar kein "python3" sondern der Interpreter heißt "python".
Das fühlt sich alles nicht so richtig an, deshalb würde ich immer den Interpreter explizit aufrufen, den ich verwenden will.
KRo
User
Beiträge: 6
Registriert: Freitag 9. August 2019, 08:39

zum zweiten Teil deiner Frage: es ist tatsächlich so, dass der Aufruf "python script.py <arguments>" funktioniert (nicht python3; bin mir gerade nicht sicher, wieso ich das im Kopf hatte/habe). "python3 script.py <argumente>" liefert gar keinen Ouput. Sorry, für die Verwirrung (trifft mich aber genauso). Es bleibt aber dabei: ohne "python" davor kommt die eben gepostete Ausgabe.

Zum Minimal-Script:

Code: Alles auswählen

#!/usr/bin/env python3 
# -*- coding: utf-8 -*-
#
import sys


def main(argv):
    for arg in argv:
        sys.stderr.write ('Arguments: "{:s}"\n'.format(arg))


if __name__ == '__main__':
    main(sys.argv)
ergibt folgendes:

Code: Alles auswählen

c:\KRo-Home\99_TEMP\Python>python script.py -s Memb_HotSpot blah
Arguments: "script.py"
Arguments: "-s"
Arguments: "Memb_HotSpot"
Arguments: "blah"

c:\KRo-Home\99_TEMP\Python>script.py -s Memb_HotSpot blah
Arguments: "C:\KRo-Home\99_TEMP\Python\script.py"

c:\KRo-Home\99_TEMP\Python>
Spannend.
Das noch bevor ich mit argparse hantiere. Ich werde das ganze auch nochmal mit Linux testen, wenn ich zuhause bin.

Ciao,
KRo
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@KRo: Wer oder was ist auf Deinem Windows denn dafür zuständig Dateien mit der Endung *.py auszuführen? *Das* Programm scheint Murks zu machen. Es sollte bei Python 3-Installationen eine ``py.exe`` sein, und die kann man auch konfigurieren welche Python.exe die dann letztlich aufruft. Dazu schaut ``py.exe`` auch in die She-Bang-Zeile. Näheres steht in der Python-Dokumentation.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
KRo
User
Beiträge: 6
Registriert: Freitag 9. August 2019, 08:39

Hm. Ich habe gerade mal ein bisschen rum probiert:

Code: Alles auswählen

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
Das sieht aus, wie ein Python, das mit einem unserer Programme mit installiert wurde ("MSC", und wieso überhaupt "on win32"? Das hier ist ein Windows10 Professional).

Da muss wohl die IT mal ran, wie es aussieht.

Ciao,
KRo
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

MSC heißt Microsoft-C-Compiler, womit üblicherweise C-Programme unter Windows übersetzt werden, und win32 ist halt der interne Name von Windows, und hat nichts mit der Version zu tun.
Antworten