我正在构建一个命令行工具,它在一个主* .py文件中执行一些python脚本(k2_fig1 - k2_fig3)(我们称之为“main_file.py”)。在此“main_file.py”中,用户必须填写数据库连接的一些参数(用户名,dbname等)
现在我不知道如何将这些参数传递给我导入的每个python脚本。我需要对这些导入的文件进行编码?
这是我的“main_file.py”代码:
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-D', '--database', action="store", type=str, dest="my_dbname", required=True, help="DB name")
parser.add_argument('-U', '--username', action="store", type=str, dest="my_username", required=True, help="DB username")
args = parser.parse_args()
# Import different scripts
import k2_fig1
import k2_fig2
import k2_fig3
if __name__ == '__main__':
main()
答案 0 :(得分:0)
在不知道k2fig_1等人的任何其他内容的情况下,您需要使用subprocess
调用它们而不是导入它们。
import argparse
import subprocess
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-D', '--database', action="store", type=str, dest="my_dbname", required=True, help="DB name")
parser.add_argument('-U', '--username', action="store", type=str, dest="my_username", required=True, help="DB username")
args = parser.parse_args()
for script in ['k2_fig1', 'k2_fig2', 'k2_fig3']:
subprocess.call([script, '-U', args.my_username, '-D', args.my_dbname])
if __name__ == '__main__':
main()
答案 1 :(得分:0)
我认为最好的方法是将命名空间属性复制到" config"模块::
import argparse
from . import config
from . import other
def update_obj(dst, src):
for key, value in src.items():
setattr(dst, key, value)
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-D', '--database')
parser.add_argument('-U', '--username')
args = parser.parse_args('-D foo'.split())
update_obj(config, args)
"其他模块" ::
from . import config
def some_func():
assert config.database == 'foo'