Guest User

Untitled

a guest
Feb 21st, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.71 KB | None | 0 0
  1. #! /usr/bin/env python3.1
  2. import sys
  3. import glob
  4. import subprocess
  5.  
  6.  
  7. def search(file, searchstring): # die funktion sollte einen rückgabewert haben, nichts printen
  8.     for i, line in enumerate(file, start=1): # () klammern um i, filename ist schöner
  9.         if searchstring in line:
  10.             print('{}: {}'.format(i, line), end='')
  11.     print()
  12.  
  13. def run(param, searchstring): # run macht mehr als run impliziert. iterieren über dateien in eine funkion, suchen in dateien in eine funktion, menü und vi spawnan in eine funktion / oder iterieren über dateien und suchen in eine  
  14.     files = glob.glob(param) # ich finde es irgendwie besser das in main zu machen
  15.     filelist = list()
  16.     for i, filename in enumerate(files): # ()
  17.         filelist.append(filename)
  18.         print('[{}] {}'.format(i, filename))
  19.         with open(filename, 'r') as f:
  20.             search(f, searchstring)
  21.     fileselect = input('Select file or (q)uit: ')
  22.     if fileselect == 'q':
  23.         return # rückgabewert
  24.     else:
  25.         lineselect = input('Select line or (q)uit: ')
  26.         if lineselect == 'q':
  27.             return # rückgabewert
  28.         else:
  29.             try:
  30.                 index = int(fileselect)
  31.             except ValueError:
  32.                 print('something bad happened') # schleife bis nutzer einen validen wert eingibt oder abbricht
  33.             else:
  34.                 args = ['vi', '+{}'.format(lineselect), filelist[index] ] # unnützes leerzeichen vor ] / du kannst auch ein tuple nehmen, weil du kein mutable object brauchst
  35.                 p = subprocess.call(args) # du könntest mit dem rückgabewert arbeiten (und solltest du auch) .. wenn du es nicht machst brauchst du p nicht
  36.  
  37. def main(args):    
  38.     if len(args) == 0: # es geht auch 'if args' .. denn bool(args) ist False wenn args leer ist
  39.         print('Find needle in files and open occurence line in vi.\n\ # in meinen augen sind zwei prints schöner.. dann brauchst du auch nicht das \n
  40. Usage: opensearch.py path_to_some_files/*.log needle ') # ersetze das opensearch mit sys.argv[1] falls sich der dateiname einmal ändert
  41.     else:
  42.     # nebenbei (es gibte auch folgendes.. aber so wie es ist ist es schöner: 'import this')
  43.     #run(*args[:2])
  44.         filelist = args[0]
  45.         searchstring = args[1]
  46.         run(filelist, searchstring) # wenn du in run rückgabewerte einführst kannst du überprüfen ob das programm erfolgreich durchgelaufen ist und wenn nötig ein exit(1) machen.
  47.     sys.exit(0) # exit() und sys.exit() machen das selbe.. die 0 ist std wert und braucht nicht sein. ausserdem endet das programm sowieso an dieser stelle
  48.  
  49.  
  50. if __name__ == '__main__':
  51.     try:
  52.         main(sys.argv[1:])
  53.     except KeyboardInterrupt:
  54.         pass
Add Comment
Please, Sign In to add comment