====== Python ======
===== Snippet list =====
==== Edit file ====
The following functions can be used to edit any provided file. In the selected file a string can be searched that can then be replaced with a given string.
++++ Show/Hide |
# search file for string
def searchLineWithString(self, string, file):
for num, line in enumerate(file, 1):
if string in line:
return num - 1
# edit line dependend on provided parameter
def editLine(self, file, searchString, newLine):
selectedFile = open(file, "r")
readSelectedFile = selectedFile.readlines()
selectedFile.close()
# find specific line
lineToEdit = searchLineWithString(self, searchString, readSelectedFile)
# edit required line
readSelectedFile[lineToEdit] = newLine
# write lines to files
selectedFile = open(file, "w")
selectedFile.writelines(readSelectedFile)
selectedFile.close()
++++
==== Send mail ====
The following functions can be used to emails from python.
++++ Show/Hide |
EMAILRECEIVER = ""
EMAILSENDER = ""
MAILSERVER = ""
MAILSERVERPORT = ""
EMAILSENDER = ""
def buildMail(self):
mailText = ""
# build your mail here string by string (mailText += "")
return mailText
def sendMail(self):
if EMAILRECEIVER and EMAILSENDER and MAILSERVER and MAILSERVERPORT:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
smtp = smtplib.SMTP()
smtp.connect(MAILSERVER, MAILSERVERPORT)
# define subject here
subject = ""
msgRoot = MIMEMultipart("alternative")
msgRoot['Subject'] = Header(subject, "utf-8")
msgRoot['From'] = "Python-Script <" + EMAILSENDER + ">"
msgRoot['To'] = EMAILRECEIVER
mailContent = MIMEText(buildMail(self))
mailText = MIMEText(mailContent, "plain", "utf-8")
msgRoot.attach(mailText)
try:
smtp.sendmail(EMAILSENDER, EMAILRECEIVER, msgRoot.as_string())
except:
print(self, "Failed to send mail to " + EMAILRECEIVER + " | Check your settings!")
print(traceback.format_exc())
else:
print(self, "Mailing disabled or not configured properly.")
++++
++++ Show/Hide |
# MAILCONFIG
MAILSERVER = ""
MAILSERVERPORT = 587
MAILUSER = ""
MAILPASSWORD = ""
EMAILRECEIVER = ""
EMAILSENDER = ""
def buildMail(self):
mailText = ""
# build your mail here string by string (mailText += "")
return mailText
def sendMail(self):
if EMAILRECEIVER and MAILUSER and MAILSERVER and MAILSERVERPORT:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
smtp = smtplib.SMTP(MAILSERVER)
smtp.connect(MAILSERVER, MAILSERVERPORT)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(MAILUSER, MAILPASSWORD)
# define subject here
subject = ""
msgRoot = MIMEMultipart("alternative")
msgRoot['Subject'] = Header(subject, "utf-8")
msgRoot['From'] = EMAILSENDER
msgRoot['To'] = EMAILRECEIVER
mailContent = buildMail(self)
mailText = MIMEText(mailContent, "plain", "utf-8")
msgRoot.attach(mailText)
try:
smtp.sendmail(MAILUSER, EMAILRECEIVER, msgRoot.as_string())
except:
print(self, "Failed to send mail to " + EMAILRECEIVER + " | Check your settings!")
print(self, traceback.format_exc())
else:
print(self, "Mailing disabled or not configured properly.")
++++
==== Execute Bash command and capture output ====
//The output will be captured when the command exited.//
++++ Show/Hide |
resultEncoded = subprocess.run("/command/to/execute", capture_output=True, shell=True)
result = resultEncoded.stdout.decode()[:-1]
resultErr = resultEncoded.stderr.decode()[:-1]
++++
//Sourced from [[https://stackoverflow.com/questions/39062015/sending-email-using-python-through-postfix|stackoverflow.com - Python Email]]//
==== Get current Memory (RAM) information/statistics (Linux)====
//Using ''op.popen'' and Linux build-in binary ''free''.//
++++ Show/Hide |
total_memory, used_memory, free_memory, shared_memory, cached_memory, available_memory = map(int, os.popen('free -t -m').readlines()[1].split()[1:])
++++
==== FastAPI/Uvicorn ====
=== Change Log Format ===
Adding the following lines to your ''uvicorn'' initialization function will change the output of the webserver:
log_config = uvicorn.config.LOGGING_CONFIG
log_config["formatters"]["access"]["fmt"] = "%(asctime)s - %(levelname)s - %(message)s"
uvicorn.run(app, port=80, host=SERVERIP, log_config=log_config)
//Sourced from [[https://github.com/tiangolo/fastapi/issues/1508|github.com - tiangolo/fastapi]]//