Python将多个变量输出到文本文件

Python将多个变量输出到文本文件,python,Python,尝试循环浏览服务器列表并使用OpenSSL连接到它们,检索SSL证书,提取服务器名称、证书过期日期,并计算证书过期的天数。代码可以很好地打印到终端会话,但我很难让它以这种格式写入每个服务器的文本文件: 服务器名称:Server01 证书到期日:2020-03-16 23:59:59 过期天数:564 有人能告诉我如何捕获For循环中的每个变量并将其写入文本文件吗?我已经尝试过多次尝试使用f.write的变体,但似乎无法使其发挥作用 f = open("SSL.txt", "a") f.write

尝试循环浏览服务器列表并使用OpenSSL连接到它们,检索SSL证书,提取服务器名称、证书过期日期,并计算证书过期的天数。代码可以很好地打印到终端会话,但我很难让它以这种格式写入每个服务器的文本文件: 服务器名称:Server01 证书到期日:2020-03-16 23:59:59 过期天数:564 有人能告诉我如何捕获For循环中的每个变量并将其写入文本文件吗?我已经尝试过多次尝试使用f.write的变体,但似乎无法使其发挥作用

f = open("SSL.txt", "a")
f.write(server_name, exp_date, days_to_expire) 
完整代码
不要忘记通过f.close关闭文件,否则文件将为空。如果使用with关键字,文件将自动关闭,如复制自的代码示例所示:


此外,write方法只接受1个参数。

根据Victor关于关闭文件的评论,要在写入时将多个变量传递给,可以使用python 3的字符串插值

例如:


谢谢你的回复,维克多。是的,我忘了在我的问题中包括f.close。我已经包括了这一点,但您可能已经发现了我在write方法中只使用1个参数时遇到的问题。您可以将此参数发送到write fServer Name:{server\u Name}Day Cert Expires:{exp\u date}Days to expire:{Days\u to\u expire}发送Python将格式化的单个字符串,用3.7中的值替换括号内的变量名。谢谢Oliver!这就是我最后做的。ssl_结果[strip][0]=主机ssl_结果[strip][1]=服务器名称ssl_结果[strip][2]=exp_日期ssl_结果[strip][3]=到期天数
import ssl
from datetime import datetime
import pytz
import OpenSSL
import socket
from datetime import timedelta
import colorama
from colorama import init
from colorama import Fore, Back, Style

## opening file
ipfile = open('server_ip.txt')
cur_date = datetime.utcnow()

for ip in ipfile:
  try:
    host = ip.strip().split(":")[0]
    port = ip.strip().split(":")[1]
    print("\nChecking certifcate for server ", host)
    ctx = OpenSSL.SSL.Context(ssl.PROTOCOL_TLSv1)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, int(port)))
    cnx = OpenSSL.SSL.Connection(ctx, s)
    cnx.set_connect_state()
    cnx.do_handshake()
    cert = cnx.get_peer_certificate()
    s.close()
    server_name = cert.get_subject().commonName
    print(server_name)
    edate = cert.get_notAfter()
    edate = edate.decode()
    exp_date = datetime.strptime(edate, '%Y%m%d%H%M%SZ')
    days_to_expire = int((exp_date - cur_date).days)
    print(exp_date)
    print("day to expire", days_to_expire)
    if days_to_expire <= 30:
      init(convert=True)
      print(Fore.YELLOW + "WARNING!",server_name, "SSL Certificate has less than 30 days before it expires." + Style.RESET_ALL)
  except:
      print("error on connection to Server,", host)
>>> with open('workfile') as f:
...     read_data = f.read()
>>> f.closed
True
>>> f = open('test.txt', 'a')
>>> for x in range(10):
...     y = str(1*x)
...     z = str(10* x)
...     j = str(100*x)
...     f.write(f"{y} {z} {j}\n")
>>> f.close()