這是我的第一個蟒蛇(2.4)程序,我可以使用你的幫助。 我有一個csv文件Python:讀取輸出腳本兩次,並寫入兩列csv
HOST, PATH
server1, /path/to/file1.py
server2, /path/to/file2.py
server3, /path/to/file3.py
即執行一個命令到第2欄/行[1]
每個路徑我搜索文本並將其追加到新列的命令的輸出。
實例命令輸出:
Command: python /path/to/file1.py
Output: server1 (NTFS) Reply:Yes
我想使我的新的CSV文件,如:
HOST, PATH, PLATFORM, REPLY
server1, /path/to/file1.py, Windows, Yes
server2, /path/to/file2.py, Linux, Yes
server3, /path/to/file3.py, BSD, No
我havnt還沒有得到它與讀取相同的輸出線和追加兩列一起工作不同的結果。我嘗試關閉作家,並在同一位讀者中打開一個新的,沒有喜樂。我嘗試過沒有運氣的縮進。我得到的最接近的是準確地搜索這兩個字符串,但它只寫入一列。
我也曾嘗試首先搜索的操作系統平臺和寫作的變化到新文件 然後,打開新文件寫入另一行
當然,我可能會迫使該通過再次運行命令工作並單獨搜索,但那是多餘的和不必要的。
import datetime
import csv
import os, time
from stat import * # ST_SIZE etc
from subprocess import Popen, PIPE, STDOUT
# Set Date
now = datetime.datetime.now()
today = now.strftime("%m-%d-%Y")
# Files
filename = "my_list.csv"
results = "results/results_" + today + ".csv" # Eg. results_04-14-2012.csv
# Commands
command = "python"
SP = " "
incsv = open(filename, 'rb')
try:
reader = csv.reader(incsv)
outcsv = open(results, 'w')
try:
writer = csv.writer(outcsv)
for row in reader:
p = Popen(command + SP + row[1], shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, empty = p.communicate()
print 'Command: %s\nOutput: %s\n' % (command + SP + row[1], stdout)
if not stdout:
writer.writerow(row + ['PLATFORM']) # Create header for new column when first line is empty on stdout
elif 'BSD' in stdout:
writer.writerow(row + ['BSD'])
elif 'Linux' in stdout or 'swap' in stdout or 'LLVM' in stdout or 'EBR' in stdout:
writer.writerow(row + ['Linux'])
elif 'NTFS' in stdout:
writer.writerow(row + ['Windows'])
else:
writer.writerow(row + ['Error Scanning'])
reply = open(results, 'w')
try:
writer = csv.writer(platform)
for row in reader:
if not stdout:
writer.writerow(row + ['REPLY']) # Create header for new column when first line is empty on stdout
elif 'Reply:Yes' in stdout:
writer.writerow(row + ['Yes'])
elif 'Reply:No' in stdout :
writer.writerow(row + ['No'])
else:
writer.writerow(row + ['Error'])
finally:
reply.close()
finally:
outcsv.close()
finally:
incsv.close()
不幸的是,這是一個我無法升級的生產服務器。感謝您的幫助,我會看到我的位置。 – Tommy 2012-04-16 21:20:45
我認爲這可能是一個簡單的解決方法,它是。非常感謝,謝謝亞歷克西斯 – Tommy 2012-04-17 12:37:49