Перезагрузить переменные во время скрипта
У меня есть скрипт, который я использую для подключения к серверу sftp и загрузки некоторых файлов, суть в том, что мне нужно сделать это для нескольких пользователей (всего 7). У меня это работает, но я в основном повторяю себя 7 раз, чтобы заставить это работать (я просто положил три в примере ниже). то, что я хочу сделать, - это заставить скрипт перепроверить переменную Hostname после каждой сессии. Есть ли способ сделать это, не перезаписывая его каждый раз?
Вот что у меня так далеко:
import pysftp
`
import netrc
`
"""
This imports from three different directories which are owned by different users.
it logs in as a user, downloads their files, closes the connection and then opens another with the other user.
it uses login details from the .netrc files to pull the usernames.
it is a bit clunky repeating all this code three times, there must be a better way but it works.
"""
#I am using netrc to conseal the login details from easy access
secrets = netrc.netrc()
Host = "ubuntu-test"
user = "user1"
username, account, password = secrets.authenticators(user)
sftp = pysftp.Connection(Host,username=username, password=password)
sftp.get_d("/foo", "/home/Documents", preserve_mtime=True)
sftp.close
user = "user2"
#If I take out the next line it still uses the user details from the previous section.
username, account, password = secrets.authenticators(user)
sftp = pysftp.Connection(Host, username=username, password=password)
sftp.get_d("/foo", "/home/Documents", preserve_mtime=True)
sftp.close()
user = "user3"
username, account, password = secrets.authenticators(user)
sftp = pysftp.Connection(Host, username=username, password=password)
sftp.get_d("/foo", "/home/Documents", preserve_mtime=True)
sftp.close()
* Edit1
Следуя предложениям, я переформатировал его как функцию, и это делает именно то, что я хотел, так что теперь это так:
def download(login, file):
username, account, password = secrets.authenticators(login)
sftp = pysftp.Connection(server, username=username, password=password)
sftp.get_d(file, destination, preserve_mtime=True)
sftp.close()
download("<login>", "/foo")
1 ответ
Решение
Следуя предложениям, я переформатировал его как функцию, и это делает именно то, что я хотел, так что теперь это так:
def download(login, file):
username, account, password = secrets.authenticators(login)
sftp = pysftp.Connection(server, username=username, password=password)
sftp.get_d(file, destination, preserve_mtime=True)
sftp.close()
download("<login1>", "/foo")
download("<login2>", "/foo")
download("<login3>", "/foo")