python - 在 python 中使用命令行参数标志的正确方法

标签 python global-variables command-line-arguments

我有一组(4 个标志)控制我的 python 脚本生成的输出的性质的标志和控制脚本打印到终端的信息量的标志(verbose 的方式) flag 通常会)。这些标志由多个函数使用。标志的值由我使用 argparse 解析的可选命令行参数设置。

目前,我在使用这些标志的任何函数之外的全局范围内拥有这些标志,而不是将这些标志作为参数传递给函数。像这样:

import argparse
flag1=True
flag2=True
flag3=True

def fun1():
    ...
    if flag1:
        ..something..
    else: 
        ..something else..
    #fun1 also uses the other flags in a similar way
    ...

def fun2():
    ...
    if flag2:
        ..something..
    else: 
        ..something else..
    #fun1 also uses the other flags in a similar way
    ...

def main()
    ...
    args=parser.parse_args()
    ...
    global flag1
    flag1=args.flag1
    # and so on for the other flags 
    fun1()
    fun2()

根据此处的许多答案(例如 this),我一直认为在 python 中使用全局变量是不好的做法。这也适用于此吗?我有点不愿意将标志作为参数传递,因为我将传递太多变量作为参数。

处理命令行参数设置的标志的最佳方法是什么?

最佳答案

最简单的解决方案是要么将所有标志传递给所有函数(作为单个 args 对象),要么仅根据哪个函数使用哪个标志来传递相关标志。

现在这确实会成为一个负担,特别是对于嵌套的函数调用,您很快就不得不将整个标志从一个函数传递到另一个函数...这里的解决方法是使用一个类,这样您就可以共享方法之间的状态:

class Command(object):
    def __init__(self, flags):
        self.flags = flags

    def fun1(self):
        ...
        if self.flags.flag1:
            ..something..
        else: 
            ..something else..

    def fun2(self):
        ...
        if self.flags.flag2:
            ..something..
        else: 
            ..something else..


    def run(self):
        self.fun1()
        self.fun2()     

def main()
    ...
    args=parser.parse_args()
    cmd = Command(args)
    cmd.run()

关于python - 在 python 中使用命令行参数标志的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34650573/

相关文章:

python - 如何设置 'system level' 环境变量?

python - hadoop,python,子进程失败,代码为 127

python - 是否可以使用 csv.DictReader 保持列顺序?

azure - 有关根据数据量对目录进行均匀排序的 Powershell 命令或脚本的指南

python - 将文档转换为 pdf 格式的有效方法

多个文件中的 Python 全局变量

c++ - 无法通过函数为全局变量赋值(Linux 上的共享库注入(inject))

c++ - 如果构造函数抛出异常,那么拥有该类的全局对象是否有意义?

c - 如何比较 C 中的字符串命令行参数?

node.js - npm - 有关已安装 Node 模块命令行参数的问题