调用函数时,如何将变量作为arg输入

时间:2018-11-09 03:48:35

标签: python-3.6

我有下面的代码可以工作,但是我需要能够以arg形式传递,而不是使用“ www.google.com”调用该函数。

python certexp.py www.google.com:

import ssl
import OpenSSL
import time
def get_SSL_Expiry_Date(host, port):
    cert = ssl.get_server_certificate((host, 443))
    x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
    raw_date = x509.get_notAfter()
    decoded_date = raw_date.decode("utf-8")
    print (decoded_date)
    dexpires = time.strptime(decoded_date, "%Y%m%d%H%M%Sz")
    print (dexpires.tm_mon,"/",dexpires.tm_mday,"/",dexpires.tm_year)

get_SSL_Expiry_Date("google.com", 443)

谢谢

1 个答案:

答案 0 :(得分:0)

在python中,sys模块处理命令行参数。

这将为您提供一系列命令行参数,其中sys.argv[0]是可执行文件的名称,然后所有后续元素都是用户参数。

这使您的代码:

导入ssl 导入OpenSSL 导入时间 导入系统

def get_SSL_Expiry_Date(host, port):
    cert = ssl.get_server_certificate((host, 443))
    x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)
    raw_date = x509.get_notAfter()
    decoded_date = raw_date.decode("utf-8")
    print (decoded_date)
    dexpires = time.strptime(decoded_date, "%Y%m%d%H%M%Sz")
    print (dexpires.tm_mon,"/",dexpires.tm_mday,"/",dexpires.tm_year)

if (len(sys.argv) == 1):
    sys.stderr.write("%s: Give hostname as an argument, optionally a port too" % (sys.argv[0]))
    sys.exit(1)

hostname = sys.argv[1]
port = 443
if (len(sys.argv) == 3):
    port = int(sys.argv[2])

get_SSL_Expiry_Date(hostname, port)

显然,您也可以为端口执行此操作。还有其他命令行解析模块,因此您可以说--port=等。