Python - Problem mit Funktion



  • Ich habe nachfolgende Python-Datei, welche eine Funktion shell_exec() zur Verfügung stellen soll.

    Diese Funktion soll nachdem os.popen ja deprecated ist, diese ersetzen.
    Sprich, ich gebe einen String an, der dann wie in der Konsole ausgeführt wird.

    shell_exec("cat test.txt | grep -v abc") zB

    Leider haperts mit dem Ding noch etwas: ich bekomme anscheinend wahllos viele Leerzeilen am Schluss zu viel ausgegeben.

    Beispiel:

    Lorem Ipsum
    

    in einer test.txt und der Aufruf shell_exec("cat test.txt") ergibt:

    Lorem Ipsum
    LEERZEILE
    LEERZEILE
    

    mit 2 Leerzeilen. Wie kann ich das beheben?

    # -*- coding: utf-8
    
    ### Imports ###
    import os
    import sys
    import shlex
    import subprocess
    
    def shell_exec(command):
            cmds = command.split("|")
            cmds = [ cmd.strip() for cmd in cmds]
            cmds = map(shlex.split, cmds)
    
            procs = []
            prev_out = sys.stdin
    
            for cmd in cmds:
                    proc = subprocess.Popen(cmd, stdin=prev_out, stdout=subprocess.PIPE)
                    prev_out = proc.stdout
                    procs.append(proc)
    
            (stdout, stderr) = procs[-1].communicate()
    
            for proc in reversed(procs):
                    proc.wait()
    
            print(stdout)
    

Anmelden zum Antworten