gpt4 book ai didi

python - 编写 Python 脚本以使用控制台命令执行

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:40 25 4
gpt4 key购买 nike

研究在底部,在-1'ing之前阅读......谢谢。

我必须编写一个运行 SQL 查询的 Python 脚本。我创建了一个主类并调用了 SQLQuery。每个 SQLQuery 实例代表一个查询。脚本的结构必须如下所示:

class SQLQuery(object):

def __init___(self, string_myQuery)...

instance1 = SQLQuery(SQLQuery1)...

instance2 = SQLQuery(SQLQuery2)...

作为用户要求,实例必须与类在同一个文件中(所以我不能只将每个实例设为主文件并单独执行该文件),并且每个实例必须 使用 Linux 控制台命令执行。我可以使用简单的 python SQLQuery.py 执行整个脚本,但我需要单独执行每个实例。查询将每天自动执行,因此我不需要终端 UI 树。它应该使用类似于这样的命令来执行:

python SQLQuery.py -inst1

将执行 instance1。

python SQLQuery.py -inst2

将执行实例2。

我研究过如何使用 Linux 命令执行 Python 脚本,并且大多数文章都是关于从 Python 脚本调用命令的。但是,我找到了this article来自 Python 文档。它建议添加-m,所以:

python SQLQuery.py -m inst1

这可以让我使用控制台命令设置我的 main,但它不起作用,因为实例不是模块。由于实例必须与类位于同一个文件中,因此当我使用控制台命令执行 SQLQuery.py 时,我不能将它们作为模块导入。

最佳答案

忽略所有无关紧要的内容,听起来你的问题是你有一堆名为 instance1instance2instance3 的全局对象,等等,并且您想基于命令行参数调用其中一个方法,该参数的值与实例名称相似但不完全相同。

这可能不是个好主意……但没那么难:

if __name__ == '__main__':
inst = sys.argv[1] # will be 'inst1', 'inst13', etc.
inst_number = inst[5:] # so '1', '13', etc.
inst_name = 'instance' + inst_number
instance = globals()[inst_name]
instance.execute()

做同样事情的更好方法是将 instance 全局变量放入可以索引的列表或字典中。

例如,假设不是 instance1instance2 等,您有一个 instances 字典,其中 instances['1']instances[2] 等。现在代替这个:

inst_name = 'instance' + inst_number
instance = globals()[inst_name]
instance.execute()

……你只需这样做:

instances[inst_number].execute()

此外,与其提出一个命令行参数,其中包含您必须解析和丢弃的额外内容,并且对人类读者的意义不比对您的代码的意义大,为什么不直接取一个数字?

python myscript.py 12

或者,也可以使用 argparse创建一个可以以所有显而易见的方式使用的参数:

python myscript.py --instance=12
python myscript.py --instance 12
python myscript.py -i12
python myscript.py -i 12

无论哪种方式,您的代码都会获取字符串 '12',然后可以使用它来查找函数,如上所述。

关于python - 编写 Python 脚本以使用控制台命令执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16615928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com