Как редактировать текстовый файл на сервере, используя python - PullRequest
0 голосов
/ 30 марта 2020

Я хочу отредактировать строку в текстовом файле на сервере Linux, используя python. Процесс включает следующие шаги

  1. Te lnet к серверу (с помощью telnetlib)
  2. Go в требуемый каталог
  3. , откройте текстовый файл в каталог
  4. установить или сбросить флаг (ДА или НЕТ) переменной в текстовом файле на основе требования
  5. сохранить файл и выйти

I ' Я могу автоматизировать до шага 2. Однако я застрял на шагах с 3 по 5.

Я попытался имитировать c шаги, которые я выполняю вручную (с помощью редактора vim). Но я не могу выполнить «ES C», заменить и «: wq!» шаги. Есть ли альтернативная процедура для редактирования файла или какие-либо способы улучшить имитацию ручного процесса

Я добавил свой код здесь

host = input("Enter the IP address:")
port = input("Enter the port:")
tn = telnetlib.Telnet(host,port)
tn.write(b'\n') 
tn.read_until(b"login:") 
tn.write(b"admin" + b'\n') 
tn.read_until(b"Password:") 
tn.write(b"admin" + b'\n') 
tn.write(b"version" + b'\n')
tn.write(b"path/to/file/" + b'\n')
# OPEN THE FILE and SET or RESET THE FLAG and CLOSE
with in_place.InPlace('filename.txt') as file:   
    for line in file:
        line = line.replace('line_to_change', 'changed_data')
        file.write(line)
print('Task executed')

Я пытался использовать библиотеку на месте, чтобы установить флаг, но программа ищет файл на моем локальном компьютере, а не на сервере. Поэтому он выдает сообщение об ошибке, указывающее, что файл отсутствует.

1 Ответ

0 голосов
/ 30 марта 2020

Если вы можете подключиться к удаленному серверу, остальные должны работать следующим образом:

with open('path/to/file','r') as fr:
    data = fr.readlines() # returns list of lines
    changed_data = ["changed_data\n" if line=="line_to_change\n" else line 
                   for line in data]

with open('path/to/file','w') as fw:
    for line in changed_data:
        fw.write(line) # write the lines back to the back   
...