ins Unterverzeichnis (nur eine Ebene) wechseln

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn es dann nicht funktioniert, zeige bitte den kompletten Code inklusive Fehlermeldung und komplettem Traceback, damit wir das Problem nachvollziehen können.
Aramis
User
Beiträge: 17
Registriert: Dienstag 29. Mai 2018, 09:41

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.

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])  
Benutzeravatar
__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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Aramis
User
Beiträge: 17
Registriert: Dienstag 29. Mai 2018, 09:41

@__blackjack__ Sorry, ich hab versucht die Namen zu editieren, dass es leichter lesbar ist. ist wohl nach hinten losgegangen. ...
Aramis
User
Beiträge: 17
Registriert: Dienstag 29. Mai 2018, 09:41

das wäre der Code:
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()
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich verstehe immer noch nicht, was Du eigentlich machen willst und wo jetzt ein konkretes Problem ist.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@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

Code: Alles auswählen

from pathlib import Path
den Fehler

Code: Alles auswählen

NameError: name 'pathlib' is not defined
erhältst, dann ist das nicht verwunderlich, denn schließlich hast Du nur Path importiert.
Aramis
User
Beiträge: 17
Registriert: Dienstag 29. Mai 2018, 09:41

Code: Alles auswählen

from pathlib import *
naja das hab ich auch schon probiert.


... ich versuche es irgendwie anders zu lösen...

Vielen Dank euch allen für eure Hilfe. :)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Es gibt hier nichts anders zu lösen, sondern Du solltest nur den Unterschied zwischen

Code: Alles auswählen

import pathlib
und

Code: Alles auswählen

from pathlib import Path
verstehen lernen.
Antworten