gpt4 book ai didi

python - 从另一个脚本导入 python 脚本并使用参数运行它

转载 作者:太空狗 更新时间:2023-10-29 19:36:39 27 4
gpt4 key购买 nike

我有一个 python 脚本,它被打包为一个命令行脚本(dbtoyaml.py in Pyrseas 既然你问了)。

我正在运行另一个 python 脚本,我想从中调用这个脚本。有没有办法导入模块并从我的第二个脚本中人为地填充所需的参数来完全避免更改任何 pyrseas 代码?

从 pyrseas 导入 dbtoyaml
-- 我的初始脚本,它也有参数
dbtoyaml.main(['-m','-H MYHOSTNAME' ....其他选项])

还没有为我工作。

我得到一个奇怪的错误:

usage: checkSchemaChanges.py [-h] [-H HOST] [-p PORT] [-U USERNAME] [-W]
[-c CONFIG] [-r REPOSITORY] [-o OUTPUT]
[--version] [-m] [-O] [-x] [-n SCHEMA]
[-N SCHEMA] [-t TABLE] [-T TABLE]
dbname
checkSchemaChanges.py: error: unrecognized arguments: MYHOSTNAME mydatabaseuser

这是我的新脚本(checkSchemaChanges.py,以及底部的 MYHOSTNAME 和 mydatabaseuser)和来自 dbtoyaml 的参数的混合,它们都是正确的。

会不会是双参数集混淆了 argparse?

最佳答案

当我编写命令行脚本时,我经常会专门设计我的脚本,因此这是可能的。关键是要将 args 与 main 函数分开解析。

例如,主函数可能如下所示:

def main(**kwargs):
# the body of the script goes here

然后在模块的其他地方我将配置 arg 解析器,解析 args 并将结果传递给主脚本:

def run():
parser = ... # configure parser here
configs = parse_args(parser)
main(**configs)

这样,如果有人想从 Python 中调用脚本,他们就可以这样做(这也使测试更容易):

import somescript
somescript.main(option='value', option2='value2')

不幸的是,您使用的脚本的作者似乎没有做任何类似的事情。如另一个答案所述,您可以覆盖 sys.argv,然后导入脚本。虽然这可能会让人觉得很麻烦,但与打开一个新进程并单独调用命令相比,它应该占用更少的资源。

关于python - 从另一个脚本导入 python 脚本并使用参数运行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28440441/

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