如何运行不同的代码取决于python脚本在终端或IDE中的运行方式?

2024-10-02 00:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,假设我有这部分代码(它并不完美)。我想要这个场景-我在__init__中检测云名称作为参数,所以所有其他模块和脚本都将在该云上运行,或者如果我想要从终端运行特定的python文件,我可以检测我想要在其上像这样运行的云python my_script.py cloud1什么是最好的方法? 当我从带有参数的终端运行它时,下面的脚本确实起作用,但是如果不是这样,它就会出现这个错误

usage: To check what is the cloud name config_parser.py: error: too few arguments'

这是密码

class CredentialsCP:

def __init__(self, cloud_name=None):
    self.config = ConfigParser.ConfigParser()
    self.cloud_name = cloud_name
    self.config_file_pass = os.path.expanduser('~/PycharmProjects/ui/config.cfg')
    self.parser = ArgumentParser(usage='To check what is the cloud name')
    self.parser.add_argument('cloud')
    self.args = self.parser.parse_args()
    if self.args:
        self.cloud_name = self.args.cloud
    if self.cloud_name is None:
        self.cloud_name = 'cloud1'

我有一个函数,它显示了云的url,它是如何被调用的


Tags: tonamepyself脚本config终端parser
1条回答
网友
1楼 · 发布于 2024-10-02 00:32:19

ArgumentParser提供了可选参数,但位置(非标志)参数的默认值是必需。在这里您可以使用:

self.parser = ArgumentParser(usage='To check what is the cloud name')
self.parser.add_argument('cloud', nargs='?', default='cloud1') # optional argument with default value
self.args = self.parser.parse_args()
self.cloud_name = self.args.cloud

可能的改进:

在这段代码中,parserargs是类的成员属性。如果它们不在__init__方法之外使用,它们可能只是局部变量:

self.parser = ArgumentParser(usage='To check what is the cloud name')
parser.add_argument('cloud', nargs='?', default='cloud1') # optional argument with default value
args = .parser.parse_args()
self.cloud_name = args.cloud

对于只标识一个可选参数,argparse可能有些过分sys.argv就足够了:

...
self.config_file_pass = os.path.expanduser('~/PycharmProjects/ui/config.cfg')
self.cloud_name = sys.argv[1] if len(sys.argv) > 1 else 'cloud1'

相关问题 更多 >

    热门问题