Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Python: optparse en wachtwoord  (gelezen 878 keer)

Offline MKe

  • Lid
Python: optparse en wachtwoord
« Gepost op: 2011/09/09, 14:28:22 »
Hoi,

Ik wil graag in een script de mogelijkheid geven om een wachtwoord in te voeren in de commandline. Dit script kan op verschillende manieren worden gestart:
1. door de gebruiker
2. door een extern programma
3. door gebruiker, maar zonder wachtwoord.

Dit betekent dat het dus op 3 manieren kan worden aangevraagd:
Bij 1, wachtwoord wordt niet op de cmdline direct ingegeven, maar alleen -p en het script vraagt om het wachtwoord met getpass zodat het niet zichtbaar wordt:
mke@mke-linux:/home/mke$ script.py -p
password:

Bij 2, wachtwoord wordt direkt bij aanroep meergegeven:
script.py -p wachtwoord
Bij 3, script wordt gestart zonder -p.

Ik weet dat ik met optionparser dit soort dingen zou moeten kunnen, alleen snap ik niet hoe ik ervoor zorg dat een optie alle drie gedragingen kan vertonen. Ik kan optie 1 heel gemakkelijk schrijven:
import getpass
from optparse import OptionParser
parser = OptionParser('Mijn opties')

parser.add_option('-p', '--pass', dest='passw', default=False,
                  help='password', action='store_true',
                  )
                  
(options, args) = parser.parse_args()

if options.passw==True:
    p = getpass.getpass()
else: p=''
Maar dit accepteerd geen argumenten, dus ik kan geen password op de commandline invoeren zoals in optie 2.

Optie 2 is nog gemakkelijker:
from optparse import OptionParser
parser = OptionParser('Mijn opties')

parser.add_option('-p', '--pass', dest='passw', default='',
                  help='password',
                  )
                  
(options, args) = parser.parse_args()

p = options.passw
Maar dan werkt optie 1 weer niet (onzichtbaar password invoeren) omdat het niet accepteerd dat er geen argument wordt ingevoerd.

Weet iemand hoe dit te doen is?
« Laatst bewerkt op: 2011/09/09, 14:38:31 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: Python: optparse en wachtwoord
« Reactie #1 Gepost op: 2011/09/09, 14:39:55 »
Optie 2 lijkt mij een goed begin. Kun je daaronder verder gaan met iets als:
if options.passw == '':
    p = getpass.getpass()
else:
    p = options.passw
??
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline MKe

  • Lid
Re: Python: optparse en wachtwoord
« Reactie #2 Gepost op: 2011/09/09, 14:56:30 »
Hoi Rachid,
Had ik ook bedacht, maar dan heb ik niet de mogelijkheid om automatisch geen wachtwoord in te voeren, $ script.py komt dan altijd bij 'p = getpass.getpass()' uit en '$ script.py -p geeft dan een foutmelding dat p altijd een waarde nodig heeft.
« Laatst bewerkt op: 2011/09/09, 14:58:40 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

Offline Rachid

  • Lid
    • rachidbm
    • Mijn blog
Re: Python: optparse en wachtwoord
« Reactie #3 Gepost op: 2011/09/09, 15:05:25 »
Aj, ik snap je probleem. Ik vind het wel apart dat je kunt kiezen om wel of geen wachtwoord te gebruiken. Heb je dan ook een ander soort toegang als je wel of geen ww invult??

Je zou een tweede optie kunnen overwegen. Bijv. -n --no-pass voor als je geen wachtwoord ingeeft.
Een elegantere oplossing weet ik zo even niet uit mijn hoofd.
Ben je ook blij dat Ubuntu zo toegankelijk en gratis is, en wil je graag net als ik iets terugdoen, kijk dan eens rond bij mwanzo, dé poort naar het bijdragen aan Ubuntu en haar gemeenschap!

Offline MKe

  • Lid
Re: Python: optparse en wachtwoord
« Reactie #4 Gepost op: 2011/09/09, 15:31:02 »
Aj, ik snap je probleem. Ik vind het wel apart dat je kunt kiezen om wel of geen wachtwoord te gebruiken. Heb je dan ook een ander soort toegang als je wel of geen ww invult??

Je zou een tweede optie kunnen overwegen. Bijv. -n --no-pass voor als je geen wachtwoord ingeeft.
Een elegantere oplossing weet ik zo even niet uit mijn hoofd.
Het script vult een database en moet zo algemeen mogelijk opgezet worden bij verschillende gebruikers met ieder hun eigen systemen en databases (mysql of postgres). Dit betekent dus dat als een gebruiker een database heeft opgezet met users die zonder wachtwoord, dat dit dan ook mogelijk moet zijn. Ik geef toe dat dit geen goede manier van werken is, maar ik kan ze niet dwingen er een wachtwoord op te zetten ;)

Goed idee, daar had ik dan weer niet aan gedacht. Dat is in ieder geval een goed lapmiddel, bedankt.