Password management - the script

Nick Demou (enLogic) ndemou at enlogic.gr
Wed Dec 21 18:42:01 EET 2005


Giorgos Keramidas wrote:
> On 2005-12-21 14:33, Pavlos Parissis <p_pavlos at freemail.gr> wrote:
> 
>>...
>>
>>Αν και δεν έχω ιδέα απο python είπα να κάνω ένα απλό τέστ απο
>>περιέργεια , δίνοντας echo "dddd" |python show-pass.py
>>
>>Password DB
>>Don't use this programm if you are not authorized to do so (hit ctrl-C to exit)
>>
>>?word, number, +, * >******Bad Command******
>>?word, number, +, * >Traceback (most recent call last):
>>  File "show-pass.py", line 126, in ?
>>    cmd=left(raw_input(colst+'?word, number, +, * '+colend+'>').strip(),255)
>>EOFError: EOF when reading a line
> 
> 
> Γι αυτό εγώ αν έγραφα κάτι σαν 'shell' σε Python, θα ξεκινούσα κάπως έτσι:
> 
>      1  #!/usr/bin/env python
>      2
>      3  import sys
>      4
>      5  def shellcmd(s):
>      6      print "## shellcmd \"" + s + "\""
>      7      return s
>      8
>      9  def main():
>     10      while True:
>     11          s = sys.stdin.readline()
>     12          # When we reach EOF, just quit
>     13          if not s:
>     14              return
>     15          try:
>     16              s = s.strip().rstrip()
>     17              shellcmd(s)
>     18          except ShellCommandError, msg:
>     19              print "command error: " + msg.strip().rstrip()
>     20
>     21  # Start at the main loop of the program.
>     22  main()
> 

σίγουρα πιο καθαρό από τον δικό μου κώδικα
μικρή λεπτομέρια: το rstrip δεν έχει νόημα μετά από strip ( που είναι 
ισοδύναμη με .lstrip().rstrip() )

> Η main() δεν χρειάζεται να είναι πιο περίπλοκη από ένα απλό:
> 
>         - read command
>         - run command
>         - catch errors
>         - repeat
> 
> Η shellcmd() μπορεί να αρχίσει να μεγαλώνει εύκολα, αν της προσθέσεις
> ένα dictionary με keys τα 'commands' και value για κάθε command ένα
> implementation function (ή ακόμα καλύτερα ένα stack από implementation
> functions, ώστε να μπορείς να κάνεις 'nest'/'overload' την υλοποίηση
> κάθε shellcmd απλά κάνοντας append() και pop() τις overloaded
> υλοποιήσεις:
> 
> Ετσι μπορείς να κάνεις ένα 'shell', του οποίου οι υποστηριζόμενες
> εντολές και το τι κάνει η κάθε εντολή μπορεί να είναι εντελώς
> επεκτάσιμα.
> 
> Κάτι άλλο που μπορεί να βολέψει αν φτιάξεις το shell σου με πιο object
> oriented τρόπο ...




More information about the Linux-greek-users mailing list