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
argparse und Python3
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.
mit oder ohne den Parameter "blah".
Auch daher mein gedanke, dass das mit argparse zu tun hat.
Ciao,
KRo
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
Auch daher mein gedanke, dass das mit argparse zu tun hat.
Ciao,
KRo
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
#!/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
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.
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.
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:
ergibt folgendes:
Spannend.
Das noch bevor ich mit argparse hantiere. Ich werde das ganze auch nochmal mit Linux testen, wenn ich zuhause bin.
Ciao,
KRo
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)
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>
Das noch bevor ich mit argparse hantiere. Ich werde das ganze auch nochmal mit Linux testen, wenn ich zuhause bin.
Ciao,
KRo
- __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
Hm. Ich habe gerade mal ein bisschen rum probiert:
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
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.
Da muss wohl die IT mal ran, wie es aussieht.
Ciao,
KRo