Я новичок в программировании на питоне. У меня есть эта проблема: у меня есть список текстовых файлов (как сжатых, так и не), и мне нужно: - подключиться к серверу и открыть их - после открытия файла мне нужно взять его содержимое и передать это к другой функции python, которую я написалPython, перенаправляющий поток Popen на функцию python
def readLogs (fileName):
f = open (fileName, 'r')
inStream = f.read()
counter = 0
inStream = re.split('\n', inStream) # Create a 'list of lines'
out = "" # Will contain the output
logInConst = "" # log In Construction
curLine = "" # Line that I am working on
for nextLine in inStream:
logInConst += curLine
curLine = nextLine
# check if it is a start of a new log && check if the previous log is 'ready'
if newLogRegExp.match(curLine) and logInConst != "":
counter = counter + 1
out = logInConst
logInConst = ""
yield out
yield logInConst + curLine
def checkFile (regExp, fileName):
generatore = readLogs(fileName)
listOfMatches=[]
for i in generatore: #I'm now cycling through the logs
# regExp must be a COMPILE regular expression
if regExp.search(i):
listOfMatches.append(i)
return listOfMatches
, чтобы уточнить информацию, содержащуюся в этих файлах. Функция предназначена для записи всего в 1 строке журналов, которые хранятся в этих файлах, используя 3 строки ... Функция отлично работает с файлами, считываемыми с моей локальной машины, но я не могу понять, как подключиться к удаленному серверу и создать эти журналы одну строку без сохранения содержания каждого файла в строку, а затем работать со строкой ... команда, которую я использую для подключения к удаленной машине:
connection_out = Popen(['ssh', retList[0], 'cd '+retList[2]+'; cat'+fileName], stdout=PIPE).communicate()[0]
retList [0] и retList [2] являются пользователем @ remote и именем папки, которое мне нужно получить
Спасибо всем!
UPDATE:
Моя проблема заключается в том, что я должен установить соединение SSH первый:
pr1=Popen(['ssh', '[email protected]', '*~/XYZ/AAAAA/log_archive/00/MSG_090308_162648.gz*' ], stdout=PIPE).communicate()[0]
Все файлы, которые мне нужно открыть, хранятся в списке, FileList [], часть из них сжата (.gz), а часть - только текстовые файлы! Я пробовал все процедуры, которые вы показали до того, как бот ничего не работал ... Я думаю, что я изменил третий аргумент функции Popen, но я не могу понять, как это сделать! Есть ли кто-нибудь, кто может мне помочь?
Я действительно не понимаю, что я должен написать что-то вроде для nextLine в Popen ([ 'SSH ', retList [0],' cd '+ retList [2] +'; cat '+ fileName], stdout = PIPE) .communicate() [0] в самом внешнем FOR функции readLogs ??? – wheisenberg
Используйте атрибут stdout для доступа к каналу. Общение здесь не поможет. Я обновил свой ответ на примере. – Ber