私はPythonをまったく初めて使用します。Pythonのcsvモジュールは、Idがやりたいことに最適です。いくつかの異なる方法を試してみましたが、4 番目の (垂直) 列を使用して配列を作成することさえまだできていません。
何百行もある 4 列の csv ファイルがあります。先に進む前に、Python が私がやりたいことをすべて達成できることを確認する必要があります。
- csvファイルを読み取り、
FILE の 4 列目 (垂直方向) で COMMAND を実行します
コマンドは印刷します
HEALTHY の各行を読み取ります (COMMAND から)
新しい 5 列目の HEALTHY を、5 列すべてで NEW_FILE に書き込みます
- FILE の最初の空の行までループする
例 FILE (セル ビューではカンマ区切り)
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'
コマンドの例
# 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
--------------------
HEALTHY の複数の行があり、すべてが Yes でない場合、HEALTHY は「No」に等しい
HEALTHY がどの行にも見つからない場合、HEALTHY は「エラー スキャン」に相当します。
これは私がこれまでに持っているものです
#!/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
上記の実行:
# 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
おまけ:
stdout/command の出力で何か(linux、swap、NTFS など、上記の問題の 3 番目のコマンドの例) も検索し、それを行 [5] に追加するか、既に追加されている後に次に追加したい場合[i]Healthy[/i] を検索しました... 新しい if ステートメントを開始しようとしましたが、行 [4]、または [i]Healthy[/i] の場合と同じ行のみを追加するように見えます。
また、OR ステートメントの使用方法もわかりません。どこ
if 'Linux' OR 'swap' OR 'LVM' in stdout:
writer.writerow(row + ['Linux']) # for multiple lines/partitions.
elif 'BSD' in stdout:
writer.writerow(row + ['BSD'])
elif 'NTFS' in stdout:
writer.writerow(row + ['Windows'])
else:
writer.writerow(row + ['Error Scanning'])
最後に、COMMAND 列を PATH に変更し、PATH を実行するようにコマンドを変更しました。これは機能しています。2 番目のコマンドを実行して、PATH のファイルサイズを取得したいと思います。私はいくつかの方法を試しました。
お時間をいただきありがとうございます。これがすべてできることを願っています。