testen ob sys.arv[1] int enthält

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
cosmonaut
User
Beiträge: 2
Registriert: Donnerstag 24. November 2016, 10:36

hi leute,
ich habe schon den ganzen morgen das internet durchforstet und bin leider noch nicht auf eine lösung gestoßen die mir weiter helfen konnte. Deshalb poste ich jetzt mal hier:
Ich versuche die terminal eingabe darauf zu testen ob der inhalt zwei int werte sind, um fehler abzufangen.

Code: Alles auswählen

def abfang():
	usage ='Richtige Eingabe: ' + sys.argv[0] + ' <Integer> <Integer>'

	if len(sys.argv) != 3:
		print (usage)
		exit(1)
	
	if type(sys.argv[1]) != int:
		print(type(sys.argv[1]))

		exit(1)

wenn ich im terminal das programm aufrufe mit:

python3 brute1.py 10 10

printed er mir bei sys.argv[1]

class 'str' obwohl nen int reingegeben wurde.....
was mache ich falsch?

über hilfe wäre ich super dankbar!

viele grüße cosmonaut
Zuletzt geändert von Anonymous am Donnerstag 24. November 2016, 12:04, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@cosmonaut: die Kommandozeilen-Parameter sind immer Strings, so wie auch jede Tastatureingabe Zeichen sind. Für Du Umwandlung mußt Du schon selbst sorgen. Am besten nimmst Du dazu aber das Paket argparse.
BlackJack

Code: Alles auswählen

#!/usr/bin/env python3
from argparse import ArgumentParser


def main():
    parser = ArgumentParser()
    parser.add_argument('start', type=int, help='first value to be tested')
    parser.add_argument('end', type=int, help='last value to be tested')
    options = parser.parse_args()
    print(options.start, options.end)


if __name__ == '__main__':
    main()
Testlauf:
[codebox=text file=Unbenannt.txt]$ ./forum3.py
usage: forum3.py [-h] start end
forum3.py: error: too few arguments

$ ./forum3.py -h
usage: forum3.py [-h] start end

positional arguments:
start first value to be tested
end last value to be tested

optional arguments:
-h, --help show this help message and exit

$ ./forum3.py 23 x
usage: forum3.py [-h] start end
forum3.py: error: argument end: invalid int value: 'x'

$ ./forum3.py 23 42
23 42[/code]
cosmonaut
User
Beiträge: 2
Registriert: Donnerstag 24. November 2016, 10:36

hey danke!
das hat geholfen. :)
Antworten