438 Stimmen

Weisen Sie die Ausgabe von os.system einer Variablen zu und verhindern Sie, dass sie auf dem Bildschirm angezeigt wird

Ich möchte die Ausgabe eines Befehls zuweisen, den ich mit os.system auf eine Variable übertragen und verhindern, dass sie auf dem Bildschirm ausgegeben wird. Im folgenden Code wird die Ausgabe jedoch an den Bildschirm gesendet und der Wert für var ist 0, was wohl bedeutet, dass der Befehl erfolgreich ausgeführt wurde oder nicht. Gibt es eine Möglichkeit, die Befehlsausgabe der Variablen zuzuweisen und auch zu verhindern, dass sie auf dem Bildschirm angezeigt wird?

var = os.system("cat /etc/services")
print var #Prints 0

7voto

lexa-b Punkte 1529

Ich mache es mit der os.system temp Datei:

import tempfile,os
def readcmd(cmd):
    ftmp = tempfile.NamedTemporaryFile(suffix='.out', prefix='tmp', delete=False)
    fpath = ftmp.name
    if os.name=="nt":
        fpath = fpath.replace("/","\\") # forwin
    ftmp.close()
    os.system(cmd + " > " + fpath)
    data = ""
    with open(fpath, 'r') as file:
        data = file.read()
        file.close()
    os.remove(fpath)
    return data

3voto

Kearney Taaffe Punkte 619

In Python 2.6 und 3 wird ausdrücklich empfohlen, PIPE nicht für stdout und stderr zu verwenden.

Der richtige Weg ist

import subprocess

# must create a file object to store the output. Here we are getting
# the ssid we are connected to
outfile = open('/tmp/ssid', 'w');
status = subprocess.Popen(["iwgetid"], bufsize=0, stdout=outfile)
outfile.close()

# now operate on the file

-1voto

lestat_kim Punkte 355
from os import system, remove
from uuid import uuid4

def bash_(shell_command: str) -> tuple:
    """

    :param shell_command: your shell command
    :return: ( 1 | 0, stdout)
    """

    logfile: str = '/tmp/%s' % uuid4().hex
    err: int = system('%s &> %s' % (shell_command, logfile))
    out: str = open(logfile, 'r').read()
    remove(logfile)
    return err, out

# Example: 
print(bash_('cat /usr/bin/vi | wc -l'))
>>> (0, '3296\n')```

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X