Forum » Programiranje » Python - command line arguments
Python - command line arguments
poweroff ::
V Pythonu bi rad napisal preprost programček, katerega namen je naslednji. Če programu dodaš cmd line parameter -k oz. -w, se vrednost ene spremenljivke spremeni, sicer pa ostane enaka.
Torej, naredim takole:
Zdaj zadevo poženem takole:
Torej, v tem primeru sta se spremenili spremenljivki cable in wifi.
Če dam samo cable:
Problem je pa, da moram dati -k nekaj, jaz bi rad dal samo -k:
No, tukaj pa dobim napako:
Kako bi bilo treba spremeniti Python program, da bi naredil to, kar želim?
Torej, naredim takole:
import getopt import sys kabelt ="connected" wifi ="on" argv = sys.argv[1:] try: options, args = getopt.getopt(argv, "k:w:", ["kabel =", "wifi ="]) except: print("Error Message ") for name, value in options: if name in ['-k', '--kabel']: kabel = "disconnected" elif name in ['-w', '--wifi']: wifi = "off" print("Cable: " + kabel + ", WiFi: " + wifi)
Zdaj zadevo poženem takole:
python test1.py -k 1 -w 1 Cable: disconnected, WiFi: off
Torej, v tem primeru sta se spremenili spremenljivki cable in wifi.
Če dam samo cable:
python test1.py -k 1 Cable: disconnected, WiFi: on
Problem je pa, da moram dati -k nekaj, jaz bi rad dal samo -k:
python test1.py -k
No, tukaj pa dobim napako:
Error Message Traceback (most recent call last): File "test1.py", line 15, in <module> for name, value in options: NameError: name 'options' is not defined
Kako bi bilo treba spremeniti Python program, da bi naredil to, kar želim?
sudo poweroff
amacar ::
Ugibam (ker ne pozna pythona), ampak jaz bi odstranil : in =
Torej:
Torej:
getopt.getopt(argv, "kw", ["kabel","wifi ="])
Zgodovina sprememb…
- spremenil: amacar ()
HotBurek ::
Ena izmed možnih rešitev:
p.s: Pa gor je napaka, kjer je definiran kabel, ekstra t.
kabelt ="connected"
#!/usr/bin/python3.7 # import import sys; kabel = "connected"; wifi ="on"; argv = sys.argv[1:]; for item in argv: if item in ("-k", "--kabel"): kabel = "disconnected"; elif item in ("-w", "--wifi"): wifi = "off"; print("Cable: " + kabel + ", WiFi: " + wifi);
p.s: Pa gor je napaka, kjer je definiran kabel, ekstra t.
kabelt ="connected"
root@debian:/# iptraf-ng
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
fatal: This program requires a screen size of at least 80 columns by 24 lines
Please resize your window
Zgodovina sprememb…
- spremenilo: HotBurek ()
redo ::
Kot je že omenil amacar, so težave v : in =. getopt ima zelo kratka navodila. Sam pa zaradi lepših izpisov pomoči (ker se čez pol leta zagotovo ne spomnim, kaj je kaj), kot tudi preprostejše dodajanje nekaterih možnosti pri obdelavi argumentov, raje uporabim modul argparse:
Tako lahko poženem tudi
#!/usr/bin/env python3 """Simple parser""" def parse_args(): """Parse command line arguments.""" import argparse parser = argparse.ArgumentParser(description='Simple parser.') parser.add_argument('-k', '--kabel', action='store_false', \ help='Description for kabel') parser.add_argument('-w', '--wifi', action='store_true', \ help='Description for wifi') return parser.parse_args() def main(args): """Main function when run from command line.""" kabel = 'connected' if args.kabel else 'disconnected' wifi = 'on' if args.wifi else 'off' print(f"Cable: {kabel}, WiFi: {wifi}") if __name__ == '__main__': main(parse_args())
Tako lahko poženem tudi
$ ./test2.py -h
usage: test2.py [-h] [-k] [-w]
Simple parser.
optional arguments:
-h, --help show this help message and exit
-k, --kabel Description for kabel
-w, --wifi Description for wifi
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Izpis z awk med več vzorci (patterni)Oddelek: Programiranje | 570 (439) | poweroff |
» | [Python3] Izvajanje ukazov po določenem časuOddelek: Programiranje | 1464 (1074) | noraguta |
» | Električno stikalo z oddaljenim nadzoromOddelek: Elektrotehnika in elektronika | 1388 (907) | Torx |
» | Kako narediti python "cmd line" programOddelek: Programiranje | 1605 (1028) | ragezor |
» | Python, prosim za pomoc pri programiranju (strani: 1 2 3 )Oddelek: Programiranje | 14043 (10145) | lenika |