Ich bin völlig neu in Python, ich lese Python CSV-Modul ist ideal für was ich gerne tun würde. Ich habe einige Zeit damit verbracht, verschiedene Methoden auszuprobieren, konnte aber noch nicht einmal ein Array mit der vierten (vertikalen) Spalte erstellen.Python: Csv lesen, Befehl ausführen und Ergebnisse in neue vertikale Spalte schreiben
Ich habe eine vierspaltige CSV-Datei mit Hunderten von Zeilen. Bevor ich fortfahre, sollte ich wahrscheinlich verifizieren, dass Python sogar all das erreichen kann, was ich tun möchte.
- Lesen einer CSV-Datei,
Befehl ausführt, auf der vierten (vertikal) Spalte FILE
der Befehl druckt
jede Zeile für gesunde (von COMMAND) lesen
schreiben Sie HEALTHY auf neue fünfte Spalte zu NEW_FILE mit allen fünf Spalten
- Schleife, bis erste leere Zeile der Datei
Beispieldatei (comma in Zellansicht begrenzt)
HOST PLATFORM ARCH COMMAND
server1 win x86_64 python '/root/server1.py'
server2 linux x86_64 python '/root/server2.py'
server3 linux x86_64 python '/root/server3.py'
Beispiel COMMAND
# python '/root/server1.py'
--------------------
Error: Could not open /root/server1.py
# python '/root/server2.py'
--------------------
server2 p1 (NTFS) output1:100 output:200 HEALTHY:Yes
--------------------
# python 'root/server3.py'
--------------------
server3 p1 (linux) output1:100 output:200 HEALTHY:No
server3 p2 (linux) output1:100 output:200 HEALTHY:Yes
server3 p3 (swap) output1:100 output:200 HEALTHY:No
--------------------
wenn mehrere Linien von gesunden und alle nicht gleich Ja, HEALTHY ist gleich "Nein"
Wenn HEALTHY in keiner Zeile gefunden wird, ist GESUNDHEIT gleich "Error Scannin" g“
Dies ist, was ich
#!/usr/bin/python
#
import csv
import subprocess
# read csv file
csv_file = open("my_list.csv", "rb")
my_csv_reader = csv.reader(csv_file, delimiter=",")
my_data_list = []
for row in my_csv_reader:
print row
my_data_list.append(row)
csv_file.close()
# write csv file
csv_file = open("new_data.csv", "wb")
my_csv_writer = csv.writer(csv_file, delimiter=",")
for row in my_data_list:
my_csv_writer.writerow(row)
csv_file.close()
# running commands, getting output
# run COMMAND column from csv_file, use "python 'my_script.py'" for now
# my_script.py only for now: print "HEALTHY:Yes"
p = subprocess.Popen("python '/root/my_script.py'",stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output, errors = p.communicate()
print output
print errors
Ausführen der oben so weit habe:
# python '/root/this_script.py'
['HOST', 'PLATFORM', 'ARCH', 'COMMAND']
['server1', 'win', 'x86_64', "python '/root/server1.py'"]
['server2', 'linux', 'x86_64', "python '/root/server2.py'"]
['server3', 'linux', 'x86_64', "python '/root/server3.py'"]
Traceback (most recent call last):
File "thisscript.py", line 24, in ?
p = subprocess.Popen('python myscript1.py',stdout=subprocess.PIPE,stderr=subprocess.PIPE)
File "/usr/lib64/python2.4/subprocess.py", line 550, in __init__
errread, errwrite)
File "/usr/lib64/python2.4/subprocess.py", line 993, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Bonus:
Wenn ich die stdout/Befehlsausgabe für etwas suchen wollte auch (wie Linux, Swap, NTFS, etc, - dritten Beispiel Befehl in Frage oben) und anhängen an Zeile [5], oder nächste, nachdem es bereits gesucht hat f oder [i] Gesund [/ i] ... Ich habe versucht, eine neue if-Anweisung zu starten, aber es scheint nur Zeile [4] anzuhängen, oder dieselbe Zeile wie bei [i] Gesund [/ i].
Ich kann auch nicht herausfinden, wie man eine OR-Anweisung verwendet. Wobei
Zuletzt habe ich die COMMAND-Spalte in den Pfad geändert und den Befehl geändert, um den Pfad auszuführen. Was funktioniert? Ich möchte einen zweiten Befehl ausführen, um die Dateigröße von PATH zu holen. Ich habe ein paar Methoden ausprobiert.
Vielen Dank für Ihre Zeit. Ich hoffe, das kann alles getan werden.
Was passiert, wenn Sie diesen Code ausprobieren? Wenn es sich um Ihre eigentliche Eingabedatei handelt, ist sie nicht durch Kommas getrennt, da sie keine Kommas enthält. –
@ThomasK Ich denke, er hat die CSV für uns einfach verschönert. – KurzedMetal
Rechts, das ist eine Beispielansicht der Zelle eines Kommas begrenzten csv. – Tommy