Code: Alles auswählen
import base64
import logging.config
import subprocess
import sys
import yaml
import requests
class NoIPUpdater:
def __init__(self, hostname, username, password, update_url, user_agent, logging_config):
self.hostname = hostname
self.username = username
self.password = password
self.update_url = update_url
self.user_agent = user_agent
self.external_ip = self.get_external_ip()
self.headers = {'User-Agent': self.user_agent, 'From': self.username}
self.logging_config = logging_config
logging.config.dictConfig(self.logging_config)
self.logger = logging.getLogger(__name__)
self.logger.info("NoIP updater started...")
def get_external_ip(self):
try:
fetch_external_ip = subprocess.check_output(['curl', 'ifconfig.me'])
external_ip = fetch_external_ip.decode().replace('\n', '')
self.logger.info("Fetched external IP {}".format(external_ip))
except Exception:
self.logger.error("Fetching external IP failed!")
return external_ip
def update_external_ip(self):
try:
auth = "{}:{}".format(self.username, self.password)
auth_encoded = base64.encodebytes(auth.encode('utf-8'))
update_url = self.update_url.format(auth_encoded, self.hostname, self.external_ip)
response = requests.get(update_url, headers=self.headers)
self.logger.info("{} has been updated with IP {}".format(self.hostname, self.external_ip))
except Exception:
self.logger.error("Update hostname failed!")
if __name__ == '__main__':
with open(sys.argv[1], 'r') as fd:
config = yaml.load(fd)
update_public_ip = NoIPUpdater(config['noip']['hostname'], config['noip']['username'], config['noip']['password'],
config['noip']['noip_update_url'], config['noip']['user_agent'], config['logging'])
update_public_ip.update_external_ip()
Das exception-Handling und den hässlichen subprocess-call wollte ich später beseitigen, mir geht's wirklich erstmal nur um das Logging-Problem - bei anderen Applikationen hat das *so* immer problemlos funktioniert, auch wenn ich nicht weiß ob *so* richtig ist.% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15 0 15 0 0 9 0 --:--:-- 0:00:01 --:--:-- 9
Traceback (most recent call last):
File "/home/sls/IdeaProjects/automate/noiptest.py", line 28, in get_external_ip
self.logger.info("Fetched external IP {}".format(external_ip))
AttributeError: 'NoIPUpdater' object has no attribute 'logger'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/sls/IdeaProjects/automate/noiptest.py", line 49, in <module>
config['noip']['noip_update_url'], config['noip']['user_agent'], config['logging'])
File "/home/sls/IdeaProjects/automate/noiptest.py", line 16, in __init__
self.external_ip = self.get_external_ip()
File "/home/sls/IdeaProjects/automate/noiptest.py", line 30, in get_external_ip
self.logger.error("Fetching external IP failed!")
AttributeError: 'NoIPUpdater' object has no attribute 'logger'