6121 Stimmen

Wie kann ich ein Programm ausführen oder einen Systembefehl aufrufen?

Wie rufe ich einen externen Befehl in Python auf, als hätte ich ihn in einer Shell oder Eingabeaufforderung eingegeben?

0 Stimmen

Ich verstehe das nicht, was ist falsch an import os; os.system('pip list | grep anatome') ? Zumindest kann man damit Piping machen, wie mein Beispiel zeigt. Es ist nicht klar, wie man das mit import subprocess; subprocess.run(["ls", "-l"]) .

21voto

houqp Punkte 713

Dafür habe ich eine Bibliothek geschrieben, shell.py .

Es ist im Grunde ein Wrapper für popen und shlex für jetzt. Es unterstützt auch Piping-Befehle, so dass Sie Befehle in Python einfacher verketten können. Sie können also Dinge tun wie:

ex('echo hello shell.py') | "awk '{print $2}'"

20voto

Valery Ramusik Punkte 1333

Rufen Sie auf. ist ein Werkzeug und eine Bibliothek zur Ausführung von Aufgaben in Python (2.7 und 3.4+). Es bietet eine saubere High-Level-API für die Ausführung von Shell-Befehlen:

>>> from invoke import run
>>> cmd = "pip install -r requirements.txt"
>>> result = run(cmd, hide=True, warn=True)
>>> print(result.ok)
True
>>> print(result.stdout.splitlines()[-1])
Successfully installed invocations-0.13.0 pep8-1.5.7 spec-1.3.1

0 Stimmen

Dies ist eine großartige Bibliothek. Ich habe neulich versucht, sie einem Kollegen zu erklären, und habe sie so beschrieben: invoke soll subprocess comme requests soll urllib3 .

20voto

Yuval Atzmon Punkte 5115

Wenn Sie unter Linux einen externen Befehl aufrufen möchten, der unabhängig ausgeführt wird (nach Beendigung des Python-Skripts weiterläuft), können Sie eine einfache Warteschlange verwenden, wie Task-Spooler oder die unter Befehl.

Ein Beispiel mit Taskspooler:

import os
os.system('ts <your-command>')

Hinweise zum Task-Spooler ( ts ):

  1. Sie können die Anzahl der gleichzeitig ablaufenden Prozesse ("Slots") mit festlegen:

    ts -S <number-of-slots>

  2. Installation von ts erfordert keine Admin-Rechte. Sie können es aus dem Quellcode herunterladen und kompilieren mit einem einfachen make , fügen Sie es zu Ihrem Pfad hinzu und fertig.

1 Stimmen

ts ist in keiner mir bekannten Distro Standard, obwohl der Zeiger auf at ist einigermaßen nützlich. Sie sollten vielleicht auch erwähnen batch . Wie anderswo auch, ist die os.system() Empfehlung sollte vielleicht zumindest erwähnt werden, dass subprocess ist sein empfohlener Ersatz.

19voto

Swadhikar Punkte 1933

Unter Windows können Sie einfach die subprocess Modul und führen Sie externe Befehle aus, indem Sie subprocess.Popen() , subprocess.Popen().communicate() y subprocess.Popen().wait() wie unten:

# Python script to run a command line
import subprocess

def execute(cmd):
    """
        Purpose  : To execute a command and return exit status
        Argument : cmd - command to execute
        Return   : exit_code
    """
    process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (result, error) = process.communicate()

    rc = process.wait()

    if rc != 0:
        print "Error: failed to execute command:", cmd
        print error
    return result
# def

command = "tasklist | grep python"
print "This process detail: \n", execute(command)

Ausgabe:

This process detail:
python.exe                     604 RDP-Tcp#0                  4      5,660 K

18voto

amehta Punkte 1167

Eine einfache Möglichkeit ist die Verwendung der Betriebssystem-Modul :

import os
os.system('ls')

Alternativ können Sie auch das Unterprozessmodul verwenden:

import subprocess
subprocess.check_call('ls')

Wenn Sie möchten, dass das Ergebnis in einer Variablen gespeichert wird, versuchen Sie es:

import subprocess
r = subprocess.check_output('ls')

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