Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python3.1
- import sys
- import glob
- import subprocess
- def search(file, searchstring): # die funktion sollte einen rückgabewert haben, nichts printen
- for i, line in enumerate(file, start=1): # () klammern um i, filename ist schöner
- if searchstring in line:
- print('{}: {}'.format(i, line), end='')
- print()
- 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
- files = glob.glob(param) # ich finde es irgendwie besser das in main zu machen
- filelist = list()
- for i, filename in enumerate(files): # ()
- filelist.append(filename)
- print('[{}] {}'.format(i, filename))
- with open(filename, 'r') as f:
- search(f, searchstring)
- fileselect = input('Select file or (q)uit: ')
- if fileselect == 'q':
- return # rückgabewert
- else:
- lineselect = input('Select line or (q)uit: ')
- if lineselect == 'q':
- return # rückgabewert
- else:
- try:
- index = int(fileselect)
- except ValueError:
- print('something bad happened') # schleife bis nutzer einen validen wert eingibt oder abbricht
- else:
- args = ['vi', '+{}'.format(lineselect), filelist[index] ] # unnützes leerzeichen vor ] / du kannst auch ein tuple nehmen, weil du kein mutable object brauchst
- 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
- def main(args):
- if len(args) == 0: # es geht auch 'if args' .. denn bool(args) ist False wenn args leer ist
- 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
- Usage: opensearch.py path_to_some_files/*.log needle ') # ersetze das opensearch mit sys.argv[1] falls sich der dateiname einmal ändert
- else:
- # nebenbei (es gibte auch folgendes.. aber so wie es ist ist es schöner: 'import this')
- #run(*args[:2])
- filelist = args[0]
- searchstring = args[1]
- 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.
- 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
- if __name__ == '__main__':
- try:
- main(sys.argv[1:])
- except KeyboardInterrupt:
- pass
Add Comment
Please, Sign In to add comment