ins Unterverzeichnis (nur eine Ebene) wechseln
wenn ich die Suchfunktion in dem Unterordner laufen lasse, findet sie mir genau das was ich suche. nur liegt das Skript halt ein Verzeichnis drüber.
das jeweilige Keyword endet mit einem Leerzeichen, deshalb nochmal die if Abfrage nach dem index_blank.
das jeweilige Keyword endet mit einem Leerzeichen, deshalb nochmal die if Abfrage nach dem index_blank.
Code: Alles auswählen
def search_keyword():
for filename in pathlib.Path(basepath).glob('**/*'):
out_shell = Popen([shellcmd], stdout=PIPE)
out_data = output_cmd.communicate()[0]
search_index = str(out_data).find(keyword)
if search_index is not -1:
index_blank = str(out_data).find('\n', search_index)
if search_index_blank is -1:
print(str(out_data)[search_index:])
else:
print(str(out_data)[search_index:index_blank])
- __blackjack__
- User
- Beiträge: 13077
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
An dem Quelltext sieht man jetzt aber nicht wo Du `pathlib` importierst, also nur diese Funktion wird zu einem `NameError` führen. Ausserdem kommen `output_cmd`, `keyword`, und `search_index_blank` einfach magisch aus dem nichts. Das sollte nicht sein. Alles, ausser Konstanten, was eine Funktion oder Methode an Werten braucht, sollte die Funktion/Methode als Argument(e) betreten. Wobei ich gerade sehe das `output_cmd` wahrscheinlich `out_shell` heissen sollte, das also ziemlich sicher nicht der Quelltext ist, den Du tatsächlich mal hast laufen lassen. Es macht nicht so viel Sinn Fehler in einem ähnlichen Quelltext statt dem tatsächlichen zu suchen. Kann es sein das es bei `search_index_blank` ähnlich ist? `blank` ist übrigens ein Leerzeichen und kein Zeilenende.
`filename` wird überhaupt nicht verwendet, was soll das da also?
``is`` und ``is not`` sind hier falsch verwendet. Es ist Zufalls dass das funktioniert. Wenn Du auf Gleichheit/Ungleicheit testen möchtest, dann verwende ``==`` und ``!=``. ``is`` und ``is not`` beziehen sich nicht auf den Wert, sondern auf die Objektidentität.
Ich persönlich verwende `find()` gar nicht, sondern lieber `index()`. Das löst eine Ausnahme aus wenn nichts gefunden wird. Ist mir sicherer als ein Zahlenwert der zufällig auch ein gültiger Index wäre wenn man nicht aufpasst.
`filename` wird überhaupt nicht verwendet, was soll das da also?
``is`` und ``is not`` sind hier falsch verwendet. Es ist Zufalls dass das funktioniert. Wenn Du auf Gleichheit/Ungleicheit testen möchtest, dann verwende ``==`` und ``!=``. ``is`` und ``is not`` beziehen sich nicht auf den Wert, sondern auf die Objektidentität.
Ich persönlich verwende `find()` gar nicht, sondern lieber `index()`. Das löst eine Ausnahme aus wenn nichts gefunden wird. Ist mir sicherer als ein Zahlenwert der zufällig auch ein gültiger Index wäre wenn man nicht aufpasst.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
das wäre der Code:
die pathlib for Schleife hab ich wieder rausgenommen. aber der Import steht oben.
die pathlib for Schleife hab ich wieder rausgenommen. aber der Import steht oben.
Code: Alles auswählen
import os
import sys
import subprocess
from subprocess import Popen, PIPE
from subprocess import call
from pathlib import Path
keyword = 'irgendwas'
def import_dir():
subprocess.call(['git', 'clone', 'http://xyz/.git'])
# an dieser Stelle muss die search funktion im Unterverzeichnis anfangen zu arbeiten
# also wechsel eine Ebene tiefer und dann weiter ...
def search():
shell_cmd = Popen(["git", "log", "--all"], stdout=PIPE)
data = shell_cmd.communicate()[0]
search_index = str(data).find(keyword)
if search_index != -1:
index_blank = str(data).find('\n', search_index)
print(str(data)[search_index:index_blank])
import_dir()
search()
@Aramis: Wenn ich das richtig verstanden habe, dann willst Du den Inhalt von Dateien oder Verzeichnissen auswerten, die während der Laufzeit Deines Programms in die Datei- und Verzeichnisstruktur des laufenden Programms eingefügt werden. Das halte ich für ein fehlerträchtiges Vorgehen.
Wenn Du mit dem Import von
den Fehler
erhältst, dann ist das nicht verwunderlich, denn schließlich hast Du nur Path importiert.
Wenn Du mit dem Import von
Code: Alles auswählen
from pathlib import Path
Code: Alles auswählen
NameError: name 'pathlib' is not defined
Code: Alles auswählen
from pathlib import *
... ich versuche es irgendwie anders zu lösen...
Vielen Dank euch allen für eure Hilfe.
Es gibt hier nichts anders zu lösen, sondern Du solltest nur den Unterschied zwischen
und
verstehen lernen.
Code: Alles auswählen
import pathlib
Code: Alles auswählen
from pathlib import Path