Kmom06 --output=<file>

  • Författare
  • Meddelande

andreaberg

css-hackare

  • Inlägg: 26
  • Blev medlem: 13 aug 2017, 01:16

Kmom06 --output=<file>

Inlägg18 okt 2017, 06:25

Har kört fast vid hur man ska få output=<file>.

Att bara skriva ut texten mellan <article> fungerar.

Kod: Markera allt
options, arguments = getopt.getopt(sys.argv[1:], "o:", ["output="])
print(options)
print(arguments)


Kör jag python3 main.py --output=test.txt get https://dbwebb.se/uppgift/analysera-text-och-ord

så printar den ut --output och test.txt som options och get och länken som arguments.

Men när jag kör
Kod: Markera allt
[code]if options[0] == "--output" and opts["known_args"]["commands"] == "get":
            print("Hej")[/code]

printar den ingenting.

Finns det någon exempelkod på detta? På https://dbwebb.se/kunskap/argparse på den asciinema längst ner under rubriken Körbar Program gör han något liknande. Finns koden till det programmet någonstans så man kan få ideer om hur man ska göra?
Användarvisningsbild

Lew

dbwebb

  • Inlägg: 406
  • Blev medlem: 05 sep 2012, 13:42
  • Ort: Karlskrona

Re: Kmom06 --output=<file>

Inlägg18 okt 2017, 07:49

Vad får du ut med print(options)? Kan du se "text.txt", "get" och länken där?

Alternativt kan du göra en codeshare (https://codeshare.io/) av din kod så är det enklare att se vad som händer.
When in doubt, use brute force.

andreaberg

css-hackare

  • Inlägg: 26
  • Blev medlem: 13 aug 2017, 01:16

Re: Kmom06 --output=<file>

Inlägg18 okt 2017, 19:05

print(options) blir [('--output', 'test.txt')]

Codeshare till de olika filerna:
https://codeshare.io/5o0Jmo

https://codeshare.io/2KoJnN

andreaberg

css-hackare

  • Inlägg: 26
  • Blev medlem: 13 aug 2017, 01:16

Re: Kmom06 --output=<file>

Inlägg18 okt 2017, 19:39

Provade även att lägga till filename som parser.add_argument under parser.add_argument version i cli_parser, men det ville inte fungera då heller.
Användarvisningsbild

Lew

dbwebb

  • Inlägg: 406
  • Blev medlem: 05 sep 2012, 13:42
  • Ort: Karlskrona

Re: Kmom06 --output=<file>

Inlägg18 okt 2017, 21:49

Det blev nog något fel med dina codeshares, den ena var tom och den andra saknade stora delar kod, men vi gör ett försök ändå.

Om du lägger till --output med: parser.add_argument("--output"...) bör du ha filnamnet (det som följer efter --output) i opts["known_args"]["output"]
When in doubt, use brute force.

andreaberg

css-hackare

  • Inlägg: 26
  • Blev medlem: 13 aug 2017, 01:16

Re: Kmom06 --output=<file>

Inlägg18 okt 2017, 23:13

https://codeshare.io/29plLX

https://codeshare.io/aJPEM6

Sådär, nu ska codesharen fungera.

Förstår inte vad som är fel.
Användarvisningsbild

Lew

dbwebb

  • Inlägg: 406
  • Blev medlem: 05 sep 2012, 13:42
  • Ort: Karlskrona

Re: Kmom06 --output=<file>

Inlägg19 okt 2017, 08:01

Din ena codeshare är tom :)

Jag testade din kod, och jag ser inget fel med den. Jag lade argparse-koden i en fil (test.py).

main.py:

Kod: Markera allt
#!/usr/bin/env python3
import test

options = test.parse_options()

print(options)


Kod: Markera allt
$ python3 main.py --output test.txt get http://dbwebb.se
ger då utskriften:

Kod: Markera allt
{'unknown_args': ['http://dbwebb.se'], 'known_args': {'commands': 'get', 'output': 'test.txt', 'verbose': 'False', 'silent': 'False'}, 'silent': 'False', 'verbose': 'False'}


Där har du known_args["commands"] = get, unknown_args[0] = "http://dbwebb.se" och known_args["output"] = 'test.txt'.

Det som du inte behöver dock är koden:

Kod: Markera allt
...
options["silent"] = args.silent
options["verbose"] = args.verbose
...


De har du redan i options["known_args"]["verbose"] och options["known_args"]["silent"]
When in doubt, use brute force.

andreaberg

css-hackare

  • Inlägg: 26
  • Blev medlem: 13 aug 2017, 01:16

Re: Kmom06 --output=<file>

Inlägg19 okt 2017, 18:36

Nu verkar det fungera när jag kör
Kod: Markera allt
if opts["known_args"]["output"] == "test.txt":
            print("Hej")


Men i uppgiften punk 7 står det python3 main.py --output=<file> get <url> då ska man väl kunna välja själv vilket filnamn som det ska sparas i? För när jag kör min kod måste det ju vara just test.txt som man väljer som filnamn.
Användarvisningsbild

Allinrep

dbwebb

  • Inlägg: 1124
  • Blev medlem: 03 sep 2012, 09:19
  • Ort: Portugal (tillfälligt)

Re: Kmom06 --output=<file>

Inlägg19 okt 2017, 18:41

Om du inte vill kräva ett specifikt filnamn, gör inte det då.

Istället för en if-sats som kollar om namnet är ett specifikt namn, spara bara användarens valda namn till en variabel.

Kod: Markera allt
filename = opts["known_args"]["output"]

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 12 gäster