Tôi mới làm quen với lập trình python. Tôi có vấn đề này: Tôi có danh sách các tệp văn bản (cả nén và không) và tôi cần: - kết nối với máy chủ và mở chúng - sau khi mở tệp, tôi cần lấy nội dung và thông tin của mình nó đến một hàm python khác mà tôi đã viếtPython, chuyển hướng dòng Popen đến hàm 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
để xây dựng thông tin chứa trong các tệp đó. Chức năng này có mục đích viết chỉ 1 dòng nhật ký được lưu trữ trong các tệp đó bằng 3 dòng ... Chức năng này hoạt động tốt trên các tệp đọc từ máy cục bộ của tôi nhưng tôi không thể tìm ra cách kết nối với máy chủ từ xa và tạo ra những bản ghi một dòng mà không cần lưu trữ các nội dung của mỗi tập tin vào một chuỗi và sau đó làm việc với chuỗi ... lệnh mà tôi sử dụng để kết nối với máy tính từ xa là:
connection_out = Popen(['ssh', retList[0], 'cd '+retList[2]+'; cat'+fileName], stdout=PIPE).communicate()[0]
retList [0] và danh sách phát [2] là tên người dùng @ từ xa và tên thư mục mà tôi phải truy cập
Nhờ tất cả trước!
UPDATE:
Vấn đề của tôi là tôi phải thiết lập một kết nối ssh đầu tiên:
pr1=Popen(['ssh', '[email protected]', '*~/XYZ/AAAAA/log_archive/00/MSG_090308_162648.gz*' ], stdout=PIPE).communicate()[0]
Tất cả các tập tin mà tôi cần phải mở được lưu trữ trong một danh sách, filelist [], một phần của chúng được nén (.gz) và một phần chỉ là các tập tin văn bản !! Tôi đã thử tất cả các thủ tục mà u cho thấy trước khi bot không có gì làm việc ... Tôi nghĩ rằng tôi mus sửa đổi các đối số thứ ba của chức năng Popen nhưng tôi không thể tìm ra cách để làm điều đó! Có ai có thể giúp tôi không ???
Tôi thật sự không hiểu, tôi nên viết một cái gì đó giống như cho nextLine trong Popen ([ 'ssh ', retList [0],' cd '+ retList [2] +'; cat '+ tên tệp], stdout = PIPE) .communicate() [0] trong FOR bên ngoài nhất của hàm readLogs ??? – wheisenberg
Sử dụng thuộc tính stdout để truy cập vào đường ống. giao tiếp sẽ không giúp ích gì ở đây. Tôi đã cập nhật câu trả lời của mình bằng một ví dụ. – Ber