2016-05-11 4 views
0

Als Hintergrund habe ich eine Liste mit Elementen unterschiedlicher Dateinamen mit ihrem vollständigen Pfad (/.../filea.dat) namens fileList erstellt, es ist von variabler Länge. Es hat die Form fileList = ['/../filea.dat', '/../fileb.dat'].TypeError beim Durchlaufen einer variablen Liste von Dateien mit Unterprozessbefehlen

Ich möchte einen Unterprozessbefehl für jede Datei in dieser Liste von Dateien ausführen, dann analysieren Sie später die Komponenten jeder der Dateien (und erzeugte neue Dateien) separat.

for i, elem in enumerate(fileList): 
    hexed = fileList[i] 
    subprocess.Popen("hexdump " + hexed + " > hexed.dat", shell=True) 

    with open("hexed.dat", "r") as f: 
     for line in f: 
     if "statement" in line: 
      value = "examplevalue" 
    if value == "examplevalue" 
     other subprocess statements that create a file that will again be used later 

Im Moment habe ich eine TypeError: cannot concatenate 'str' and 'list' objects. Lassen Sie mich wissen, ob ich auch mit diesem Methodenansatz auf dem richtigen Weg bin.

Bitte lassen Sie mich wissen, wenn ich zusätzliche Erläuterungen geben muss; Ich habe versucht, die Grundlagen zu vereinfachen, da die anderen Details für das Problem nicht wichtig sind.

+0

1-, wenn Sie die 'TypeError' dann fragen nach dem' TypeError' korrigieren möchten (obwohl die Fehlermeldung ziemlich klar zu sein scheint. [Bearbeiten] Ihre Frage ein und fügen Sie die komplette Rückverfolgung). Daher könnte Ihre Frage auch für jemand anderen nützlich sein. Wenn Sie wissen möchten, wie Sie eine Unterprozessausgabe Zeile für Zeile lesen können, fragen Sie danach (obwohl es bereits viele Fragen gibt). Wenn Sie wissen möchten, wie man eine Datei in Python hexlifiziert, Sie können auch nach einer separaten Frage fragen (Sie müssen nicht "hexdump" ausführen) Versuchen Sie, Ihre Fragen auf ein einzelnes Problem pro Frage zu beschränken. – jfs

+0

Ich kann sehen, wie ich mehrteilige Frage ist nicht ideal, aber für mich viele der Probleme zusammen. Während, wie Sie sagen, es gibt andere Optionen für Hexdump Ich verwende den Subprozess, um andere Dinge neben Hexdump durchzuführen, das war nur ein leichter Teil hier zu vermitteln. Ich versichere Ihnen, dass ich mir andere Fragen angeschaut habe. Ich fand diese Antworten einfach nicht hilfreich für meine Situation, also stellte ich meine Frage. – stackofpancakes

+0

Es gibt allgemeine Fragen in [die Subprozess-Tag-Info] (http://StackOverflow.com/Tags/SubProcess/info) – jfs

Antwort

2

Sie sind in der Nähe. Sie haben den Typfehler erhalten, da Popen erfordert, dass Sie auch shell=True festlegen, wenn Sie eine Zeichenfolge anstelle einer Liste übergeben. Aber es gibt ein anderes Problem: Popen wartet nicht auf den Prozess zu vervollständigen, also, wenn Sie die Datei lesen, gibt es noch nichts Nützliches darin. Eine andere Strategie besteht darin, die Dateiumleitung zu überspringen und den Ausgabestream direkt zu lesen. Beachten Sie auch, dass Sie enumerate nicht verwenden müssen ... die for-Schleife ruft bereits die Werte in der Liste ab. Und wir können die Shell überspringen und den Befehl als Liste übergeben.

for hexed in fileList: 
    proc = subprocess.Popen(["hexdump", hexed], stdout=subprocess.PIPE, 
     stderr=open(os.devnull, 'w')) 
    for line in proc.stdout: 
     if "statement" in line: 
      value = "examplevalue" 
    proc.wait() 
    if proc.returncode != 0: 
     print('error') # need less lame error handling! 
    if value == "examplevalue" 
     other subprocess statements that create a file that will again be 
+0

Ich hatte tatsächlich shell = True Ich weiß nicht, wie ich es vermisste, das in meine Frage hinzuzufügen. Ich habe Ihre Anpassungen vorgenommen und es scheint jetzt ordnungsgemäß ausgeführt zu werden. Aber ursprünglich wollte ich, dass diese Ausgabe in eine Datei geht, da ich andere Teile meines Codes auf diese generierten Dateien schauen und zusätzliche Dateien erzeugen werde. Ich glaube nicht, dass ich später die stdout Abkürzung ziehen kann, ich muss diese Dateien erzeugen. – stackofpancakes

Verwandte Themen