Seite 1 von 1

Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 11:00
von kalli_P
Ich möchte gerne negative Zahlen als Argumente übergeben, aber dann ist es gleich ein Kommando-Argument.

Beispiel: python Crawl_Flickr.py -s $pwd 37.685364 -121.773031 37.686364 -121.772931
Crawl_Flickr.py: error: no such option: -1

Die "-1" von -121.773031 wurde als Argument erwartet.

Code: Alles auswählen

from optparse import OptionParser
parser = OptionParser("Crawl_Flickr.py [Operation] Latitude_1 Longitude_2 Latitude_2 Longitude_2") 
parser.add_option("-s", "--save", dest="save_file", help="Save file to directory")
(args) = parser.parse_args()
save_dir = save_file.save_file

if len(args) != 4: 
    parser.error("4 Arguments were needed: Latitude_1 Longitude_2 Latitude_2 Longitude_2")
else:
    lat1=args[0]
    lon1=args[1]
    lat2=args[2]
    lon2=args[3]

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 11:35
von BlackJack
@kalli_P: Benutze '--' beim Aufruf um das Ende der Optionen zu markieren und dem `OptionParser` zu sagen dass danach nur noch Positionsargumente folgen:

Code: Alles auswählen

python Crawl_Flickr.py -s $PWD -- 37.685364 -121.773031 37.686364 -121.772931

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 11:56
von darktrym
Oder Hochkommas bei der Parameterübergabe verwenden.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 12:01
von kalli_P
Danke euch beiden

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 12:09
von bwbg
Ansonsten ist es auch üblich, negative Werte zu klammern.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 12:41
von BlackJack
@darktrym: Das nützt nichts denn die wird das Programm nie sehen — die sind für die Shell und die übergibt sie nicht dem aufgerufenen Programm.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 13:21
von Michael Schneider
Hi BlackJack,
BlackJack hat geschrieben:@darktrym: Das nützt nichts denn die wird das Programm nie sehen — die sind für die Shell und die übergibt sie nicht dem aufgerufenen Programm.
was meinst Du, die Hochkommas? Ist das nicht gewollt, dass das Programm nur die negativen Werte ohne Hochkommas bekommt? Ich hätte alternativ auch Anführungsstriche vorgeschlagen.

VG

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 13:26
von cofi
Sicher ist das gewuenscht, nur haelt das dann `optparse` nicht davon ab die Werte als Optionsparameter zu interpretieren.
Insofern loest Shell-Quoting jeder Art nicht das Problem hier.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 14:13
von Michael Schneider
Ok, sorry, habe "OptionParser" von BlackJack nicht als Modul sondern als Prozessschritt beim Skriptstart gelesen. Was passiert, wenn man Anführungsstriche und Hochkommas verwendet? Interpretiert OptionParser die Parameter dann gleich als String?

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 14:19
von BlackJack
@Michael Schneider: Ich verstehe die Frage nicht — Wenn man in der Shell ein Argument in Hochkommas/Anführungszeichen einfasst kommt das beim OptionParser gar nicht an, die sind ja für die Shell und die entfernt die. Wenn man die vor der Shell schützt, dann sind sie ganz normal Teil des Arguments.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 14:26
von Michael Schneider
Ich habe es so verstanden, dass wenn man '-15' an das Skript übergibt, die Shell die ' entfernt und an das Skript -15 übergibt, welche dann vom OptionParser als Option interpretiert wird.

Meine Frage war, was passiert, wenn man dem Skript '"-15"' übergibt. Ob dann beim OptionParser "-15" ankommt, die er entweder als String "-15" oder als Zahl -15 interpretiert.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 14:49
von Hyperion
In Sachen XY-Problem: Gibt es einen Grund, wieso Du nicht ``argparse`` einsetzt?

Evtl. wäre das hier auch eine Lösung für ``optparse``.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 15:25
von BlackJack
@Michael Schneider: Beim `OptionParser` kommt dann "-15" an, also mit Anführungszeichen und Positionsargumente sind grundsätzlich Zeichenketten. Bei `argparse` kann man auch bei Positionsargumenten Typen angeben und wenn man dort angibt es soll eine Zahl sein, dann würde es einen Fehler geben weil "-15" nicht in eine Zahl umgewandelt werden kann.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 16:10
von darktrym
Hat schon seinen Grund warum ich noch bei getopt stehengeblieben bin.

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 16:33
von BlackJack
@darktrym: Und der wäre?

Re: Negative Argumente übergeben

Verfasst: Mittwoch 19. Februar 2014, 20:35
von darktrym
Man gibt kurze und lange Optionen an und alles was er nicht erkennt sind dann normale Parameter. In diesem Fall werden die negativen Zahlen nicht als Option interpretiert. Die Auswertung erfolgt in einer Schleife, so kann die Position der Optionen varieren. Der Syntax ist einleuchtend aber nicht ganz pythonisch, kommt schließlich aus der GNU Ecke.