我必须从命令行输入参数,即用户名、密码和数据库名.我知道如何在不使用标志的情况下使用sys.argv,如下面所示:

##Test.py
hostname = str(sys.argv[1])
username = str(sys.argv[2])
password = str(sys.argv[3])

def ConnecttoDB():
    try:
        con=sql.connect(host=hostname, user= username, passwd= password)
        print ('\nConnected to Database\n')

# If we cannot connect to the database, send an error to the user and exit the program.
    except sql.Error:
        print ("Error %d: %s" % (sql.Error.args[0],sql.Error.args[1]))
        sys.exit(1)

    return con   

因此,它可以运行为:

$test.py DATABASE USERNAME PASWORD

但问题是我必须使用"标志".所以,脚本可以这样运行:

$test.py -db DATABSE -u USERNAME -p PASSWORD -size 20

如何使用标志从命令行获取参数?

推荐答案

首先感谢Mark提供的"argparse"代码.我已经找到了从由标志指定的命令行获取参数的方法.我正在粘贴下面的代码,其中使用了一个修改过的"标记"代码和一个小模块,该模块显示了如何使用通过命令行收集的参数:

import argparse

parser = argparse.ArgumentParser()

#-db DATABASE -u USERNAME -p PASSWORD -size 20000
parser.add_argument("-host", "--hostname", dest = "hostname", default = "xyz.edu", help="Server name")
parser.add_argument("-db", "--database", dest = "db", default = "ding_dong", help="Database name")
parser.add_argument("-u", "--username",dest ="username", help="User name")
parser.add_argument("-p", "--password",dest = "password", help="Password")
parser.add_argument("-size", "--binsize",dest = "binsize", help="Size", type=int)

args = parser.parse_args()

print( "Hostname {} db {} User {} Password {} size {} ".format(
        args.hostname,
        args.db,
        args.username,
        args.password,
        args.binsize
        ))
def ConnectToDB():
    print ('Trying to connect to mySQL server')
    # Try to connect to the database
    try:
        con=sql.connect(host=args.hostname, user= args.username, passwd= args.password)
        print ('\nConnected to Database\n')

    # If we cannot connect to the database, send an error to the user and exit the program.
    except sql.Error:
        print ("Error %d: %s" % (sql.Error.args[0],sql.Error.args[1]))
        sys.exit(1)

    return con

我关心的一个问题是如何使用从参数到代码的变量.为此,需要做两件事

  1. 将'dest'添加到Add_参数行e.x.dest="username",这意味着从命令行收集的值将被分配给变量'username'
  2. 无论何时,只要在变量e.x con=sql之前添加"args",就可以使用命令行从"dest"分配的变量.连接(主机=args.hostname,用户=args.username,密码=args.password)

Python-3.x相关问答推荐

使用Pandas 阅读Excel定义的名称和单元格值(&Q;)

如何使用正则表达式通过反向搜索从链接中获取特定文本

TypeError: issubclass() arg 1 在 Flask 中导入 langchain 时必须是一个类

嵌套协议的使用(协议成员也是协议)

删除给定数组中所有元素为True的所有子数组

如何在python中将列表转换为其他格式

对齐文本文件中的列

运行 PyCharm 测试时如何解决django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库?

Python:如何判断一个项目是否被添加到一个集合中,没有 2x(hash,lookup)

pythondecorator中的变量范围

理解 Keras 的 ImageDataGenerator 类中的 `width_shift_range` 和 `height_shift_range` 参数

multiprocessing.Queue 中的 ctx 参数

在 Python 3 中使用 unittest.mock 修补 input()

为什么中断比引发异常更快?

对字节进行按位运算

为现有项目创建virtualenv

Windows 下 Python 3.x 的 OpenCV

用 Anaconda 安装了一个包,无法在 Python 中导入

首次使用后 zip 变量为空

如何从Pandas 中的字符串中提取前8个字符