os.system und subprocess.call

  • Hallo liebe Community,

    ich möchte ein Script schreiben.
    Momentan verwende ich subprocess.call und es gibt auch das Ergebniss aus.

    Jetzt kommt das Problem


    nmap = subprocess.call(["df", "-h"])

    Code
    Filesystem    Size  Used Avail  Use% Mounted on 
    .....


    und danach erscheint 0.

    Ich möchte aber nur die 0 haben, den Rest davor benötige ich nicht.

    Was muss man machen, damit nur die 0 ausgegeben wird.

    Gruß,
    Alexander1992

  • Hallo Alexander,

    suche mal nach

    Code
    Ausgabe Umleitung nach /dev/null


    oder auch

    Code
    Ausgabe Umleitung zum Nulldevice

    Zum Nulldevice siehe hier.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (5. April 2016 um 12:03)

  • Danke,

    Wie geht das genau?


    Dieser Code soll überprüfen, b mein Pi am Netz ist. Wenn nicht REBOOT


    Gruß,
    Alexander

  • Hallo Alexander,


    ach, die Thematik.

    Frag Dich doch mal, welchen Sinn macht es, jedes Mal, wenn mal kurz die Netzverbindung wackelt, einen reboot zu machen? Meines Erachtens keine. Du solltest lieber die Möglichkeiten, die Linux Dir bietet, nutzen, um
    a) die Verbindung stabil einzurichten
    b) die Verbindung wieder herzustellen

    Zu a) gehört ein gutes Netzteil - nicht diese Handyladekabel...

    Letzteres habe ich mit dem Programm [font="Courier New"]HostRepair[/font] erreicht.

    Reboot ist etwas, was Du selber veranlassen solltest - und keine Software, die rebooten soll, nur weil Du es (gerade noch) nicht besser weißt.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (5. April 2016 um 12:11)

  • Wenn du die Ausgabe nicht brauchst, ist es eigentlich schicker, sie auch nicht zu pipen, wie von dbv vorgeschlagen, sondern nach null zu schreiben, wie Andreas bereits erwähnte.

    Code
    import os, subprocess
    devnull = open(os.devnull, "w")
    nmap = subprocess.call(["df", "-h"], stdout=devnull)

    Bzw. ab python 3.3 dann einfacher

    Code
    import subprocess
    nmap = subprocess.call(["df", "-h"], stdout=subprocess.DEVNULL)

    Oder du nutzt einfach check_call statt call.

    Übrigens ist

    Code
    os.system("sudo python nmap.py")

    nicht besonders "pythonic" und dazu auch noch ne dicke SIcherheitslücke. Denn so könnte man auch ohne sudo Rechte beliebigen Code mit sudo ausführen, indem man die nmap.py verändert. Eleganter ist es, die zweite Datei zu importieren und Funktionen zu definieren. Außerdem kannst du alle Aufrufe von os.system durch das mächtigere subprocess Modul ersetzen, was auch von den python docs so empfohlen wird. Ich verstehe hier nicht, warum du es oben richtig machst und unten falsch.

    Kleine Lektüre: https://docs.python.org/3/library/subp…ss-replacements

    PS: Das Skript läuft so, wie du es gepostet hast? :-O
    In welcher Version von python gibt es denn sowas

    Code
    nmap > ifconfig.log

    Einmal editiert, zuletzt von KrawallKurt (5. April 2016 um 14:05)

  • Hi KrawallKurt,

    danke für die Lektüre, diese werde ich mal durcharbeiten ^^

    Wie würde denn "sudo python nmap.py" mit subprocess.call aussehen ?

    Ist das so richtig?

    Code
    subprocess.call(['python', "nmap.py"])

    Gruß,
    Alexander

    Einmal editiert, zuletzt von Alexander1992 (5. April 2016 um 14:43)

  • Hallo Alexander,


    Leider frist das dauerhafte abrufen des Scriptes alle meine CPU Ressourcen.

    Also, mein [font="Courier New"]HostRepair[/font] schaut jede Sekunde auf die Netzwerkverbindug - einstellbar von 0 ms bis 60 s. Das frisst keine 2% der CPU (einschl. der anderen Tasks, die ohnehin laufen). Nur wenn ich die Verzögerung herausnehme, dann komme ich auch auf 100%.

    Daraus kannst Du folgern, dass Anwendungen, die auf keine Anwender-Eingaben warten, in jeder Endlosschleife mit [font="Courier New"]sleep()[/font] oder anderen Befehlen die Ausführung verzögern sollten. Optimal ist es, wenn Dein Programm nicht nennenswert zur CPU-Auslastung beiträgt. Denn Du solltest nie davon ausgehen, dass Dein Programm das Einzige ist, das auf einem Rechner läuft. Sehr häufig buhlen mehrere Prozesse um CPU-Zeit. Und wenn Du irgendwelche zeitkritischen Sachen hast (z.B. Einhaltung von zeitbasierten Protokollen), läufst Du in die nächste Falle.

    Da bei einem Programm wie Deinem die Reaktionszeit unerheblich ist, sollte Dein Programm dann auch höflich sein und anderen Anwendungen den Vortritt lassen.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (5. April 2016 um 17:31)

  • Hallo Alexander,

    such' doch mal mit Hilfe der Forensuch-Funktion nach

    Code
    Unable to resolve hostname


    und / oder

    Code
    HostRepair


    und schon hast Du einen der beiden führenden Beiträge zum Thema Mysterium gefunden.

    Und schon weißt Du, wie man gezielt nach irgendwelchen Lösungen suchen kann.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    2 Mal editiert, zuletzt von Andreas (15. Oktober 2017 um 14:03)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!