我有一个python脚本,它被打包为命令行脚本(从您询问起,Pyrseas中的dbtoyaml.py)。
我正在运行另一个python脚本,我想从中调用这个脚本。没有办法从我的第二个脚本中导入模块并人工填充所需的参数以避免更改任何pyrseas代码吗?
from pyrseas import dbtoyaml
-- My initial script, which also takes arguments
dbtoyaml.main(['-m','-H MYHOSTNAME' .... other options])
还没为我工作。
我有个奇怪的错误:
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?
当我编写命令行脚本时,我常常会专门设计我的脚本,这样才有可能。关键是将参数与主函数分开分析。
例如,主函数可能如下所示:
然后在模块的其他地方,我将配置arg解析器,解析args并将结果传递到主脚本中:
这样,如果有人想从Python中调用脚本,他们可以这样做(这也使测试更加容易):
不幸的是,你正在使用的脚本的作者似乎没有这样做。如另一个答案所述,您可以覆盖
sys.argv
,然后导入脚本。虽然这可能会让人觉得有点老套,但它应该比打开一个新进程并分别调用命令所占用的资源少。这似乎不是最好的方法,但是您可以设置sys.argv
但我真的不知道dbtoyaml.py是什么样子
相关问题 更多 >
编程相关推荐