所以,我试图建立一个脚本,可以让我运行如下命令:遇到问题打电话给在单独的参数解析函数main()
python3 rhize_refactored.py -l <str>, -sa, -si <int>, -i <input_path>, -o <output_path>
我设计我的脚本这样参数解析步骤是他们自己的函数,然后我在main()中调用它们。以下是这些部分是这样的:
from argparse import ArgumentParser
def parse_all_args():
parser= ArgumentParser()
parser.add_argument('-sa', '--automation', action='store_true', required=True)
parser.add_argument('-si', '--sample_id', type=int, required=True)
parser.add_argument('-i', '--input_path', required=True)
parser.add_argument('-o', '--output_path', required=True)
args= parser.parse_args()
return args.automation, args.sample_id, args.input_path, args.output_path
def parse_language():
parser = ArgumentParser(prog= 'rhize_refactored.py')
parser.add_argument('-l', dest='language', choices ['bash','python'], type=str, required=True)
args= parser.parse_args()
return args.language
def r_bash():
parse_all_args()
if args.automation:
stage_automation_templates()
sample_id= args.sample_id
s3_input_path= args.input_path
s3_output_path= args.output_path`
def main():
parse_language()
if args.language == "python":
r_python()
if args.language == "bash":
r_bash()
main()
当我尝试运行此脚本,我得到了几个问题:
- 它不会让我在一个步骤运行的命令。我必须首先运行
python3 rhize_refactored.py -l
,然后它说我错过了-sa, -si, etc...
参数。但是当我一口气说出所有的论点时,它说它不承认-l
以上的论点。 - 当我调用main()中的参数解析函数时,它无法识别'args',但即使我设置了
args=parse_all_args
,if语句也存在问题,例如'str' object has no attribute 'automation'
。
我能做些什么来纠正这些错误以及您预见的其他人?
请添加真实代码,图片无助于任何人 – PRMoureu
“action =”store_true“'也是必需的参数的要点是什么? –
当您执行'return args.language'时,这会将值传递回您调用'parse_language()'的位置,因此如果您不对返回值进行任何操作,则函数不会与每个变量共享变量其他。如果你想设置一个全局变量,把'global args'放在设置它的函数中。 –