$ python --version
Python 3.6.8
我写了一个脚本,其中包含一些命令行参数。最初,这些工作没有问题:
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument(
'-log',
'--loglevel',
default = 'info'
)
arg_parser.add_argument(
'-lf',
'--logfile',
default = './logs/populate.log'
)
...
cl_options = arg_parser.parse_args()
...
然后我把"-log";短标志,并添加了另一个标志:
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument(
'-ll',
'--loglevel',
default = 'info'
)
arg_parser.add_argument(
'-lf',
'--logfile',
default = './logs/populate.log'
)
arg_parser.add_argument(
'-d',
'--daemon',
action = 'store_true'
)
...
cl_options = arg_parser.parse_args()
...
当现在运行脚本时,仍然使用初始参数集-"的名称-log";标志是相同的,并且它缺少"-d/-守护进程";运行时的标志:
$ python3 populate.py --daemon
usage: populate.py [-h] [-log LOGLEVEL] [-lf LOGFILE]
populate.py: error: unrecognized arguments: --daemon
我尝试过的东西:
- 请确保我已签出正确的git分支
- 删除pycache文件夹
- 重新启动脚本运行的计算机
- 对argparse使用reload((选项
如果我查看脚本的内容,我可以看到我所做的更改是存在的,但它们拒绝生效。
我不是Python专家,我还在学习,但我一定做错了什么。有人能给我指正确的方向吗?
谢谢!
编辑:
我已经尽我所能验证了脚本正在使用最新的文件:
远程系统(运行脚本的地方(:
$ pwd
/opt/ise-web-rpt
$ ls populate.py
populate.py
$ git branch
* develop
main
$ sha256sum populate.py
2601cbb49f6956611e2ff50a1b1b90ba61c9c0686ed199831d671e682492be4b populate.py
本地系统(发生开发的地方(:
$ git branch
* develop
main
$ sha256sum populate.py
2601cbb49f6956611e2ff50a1b1b90ba61c9c0686ed199831d671e682492be4b populate.py
据我所知,脚本是正确的文件,我在Git的正确分支上。
在pdb中执行此操作时,似乎是由于在populate.py脚本中导入另一个Python文件导致的。
两个文件都以完全相同的方式配置了argparse,所以最初没有问题。当我将新参数添加到populate.py时,导入的第二个文件没有添加此参数,所以它是"未识别的";到导入的Python文件。这也是为什么标志名称似乎没有改变的原因——它是从导入的文件中返回名称,而不是我试图运行的文件。我在第二个文件的args列表中添加了新参数,脚本就可以运行了。
我现在需要弄清楚层次结构是如何为argparse工作的,但这是一个单独的问题。感谢大家的投入。