if x befell ausführen aber ausgabe in txt umleiten und verwenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Hi,

ich beschreib mal meine Frage:

- ich will das mein script selber erkennt auf welchem server es aktuell ausgeführt wird. Ich denke das hab ich schon hinbekommen. Nun soll das script wenn es erkannt hat das es der Server also True ist ein paar Befehle ausführen.

Diese Befehle sollen oder müssen aber in eine Textdatei umgeleitet werden weil ich z.B wenn der Server mir dann z.b das date ausgibt will ich auf z.B 2021 wieder greppen. Wenn er in der Textdatei 2021 erkannt hat soll er mir in die Ausgabe z.B date --> ok (in grün) hinterlegen.

sys.stdout= open("/dubi/test1","w") hinterlegt mir leider nur den Hostnamen und die Ausgabe print('ich bin der aserver') in der txt Datei. Aber die Ausgabe os.system('cat /proc/mdstat') leitet er mir hier nicht rein :( oder mach ich es mir zu leicht?

Wäre super wenn ihr mir helfen könnt bzw mir es in leichten Beispielen erklären könnt.

mein code sieht momentan noch so aus:

Code: Alles auswählen

#!/usr/bin/env python
import os.path
import socket
import os,sys

sys.stdout= open("/dubi/test1","w")


Name = socket.gethostname()
print(Name)

#Was bin ich
os.path.isfile("/dubi/aserver")
os.path.isfile("/dubi/bserver")

if True:
    print('ich bin der aserver')
    os.system('cat /proc/mdstat')

else:
    print('ich bin der bserver')
    os.system('date')
wobei auch hier werde ich bei meinem doppelten os.path.isfile auf Probleme stoßen. Kann ich hier auch sagen if aserver und else bserver? wenn ja wie?

danke!
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

`os.path` muß man nicht explizit importieren. Heutzutage würde man sowieso das meiste durch pathlib ersetzen. Die beiden os.path.isfile-Aufrufe tun nichts. Was Du mit `if True` erreichen willst, verstehe ich nicht.
Variablennamen schreibt man klein. sys.stdout will man nicht verbiegen, wenn man etwas in eine Datei umleiten will, dann macht man das beim Aufruf mit >.
os.system benutzt man nicht, sondern subprocess.run. Und für so triviale Sachen ruft man kein externes Programm auf. Sowohl cat als auch date sind mit Pythonfunktionen Einzeiler.

Code: Alles auswählen

import datetime
import socket
from pathlib import Path

server_name = socket.gethostname()
print(server_name)

if server_name == "aserver":
    print('ich bin der aserver')
    print(Path('/proc/mdstat').read_text())
else:
    print('ich bin der bserver')
    print(datetime.datetime.now())
Was Du greppen willst, und was das mit dem date soll, verstehe ich nicht. Kannst Du mal ein konkretes Beispiel über den Ablauf geben.
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Hi, danke für deine schnelle Antwort und super Hilfestellung.

gerne also ich stelle mir vor das mein script nach dem booten vom server ein paar Befehle ausführt, wie z.B Raid status prüfen (UU soll er z.B schreiben Raid ok), date soll nur prüfen ob das datum passt und dann schreiben Date ok, und z.B noch den Owner von /root/test ausgeben und wenn er z.B Sandy ist soll er ausgeben Owner -ok
und bei bserver ähnliche befehle aber z.B Owner ist ein anderer und das Raid ist hier nicht vorhanden.
Goofy19000
User
Beiträge: 21
Registriert: Sonntag 9. Mai 2021, 22:05

Hi, du hast mich aber auf den richtigen Pfad gebracht, bin weiter dank dir danke!
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Hallo Goofy19000,

zusätzlich zu Sirius Kommentaren folgender Vorschlag:

os.path.isfile() gibt True zurück wenn die Datei existiert.
Man kann dafür auch pathlib verwenden, finde ich in diesem speziellen Fall aber weniger passend.
Statt madstat in die datei zu pipen würde ich das mit Python lesen und in die Ausgabedatei speichern.
Dann hast du auch mehr Flexibilität um das Datum, usw. dazu zuschreiben.

(Achtung nicht lauffähig, nur ein grobes Konzept und ungetestet)

Code: Alles auswählen


raid_data = ""
with open("/proc/mdstat", "r") as mdstat_file:
    raid_data = mdstat_file.read()


with open("/dubi/test1", "w") as out_file:
	
    if os.path.isfile("/dubi/aserver"):
        # falls die Datei aserver existiert, muss dies wohl der aserver sein
        out_file.write("ich bin der aserver")
    elif os.path.isfile("/dubi/bserver"):
        # falls die Datei aserver existiert, muss dies wohl der aserver sein
        out_file.write("ich bin der bserver")
    else:
        # keine der Dateien existiert, also unbekannter server
        out_file.write("unbekannter server")
        
    # jetzt noch die raid_daten in die gleiche Datei schreiben
    outfile.write(raid_data)
Den Hostname oder was auch immer kann man natürlich auch in die Datei schreiben.
Die grüne Ausgabe in die Textdatei zu bekommen wird schwierig weil es, - naja eine Textdatei ist. Oder hab ich dich falsch verstanden?
Antworten