Python:在 main() 中访问 __version__ 的最优雅方式
Python: most elegant way of accessing __version__ inside main()
我正在创建一个小的 Python 3 程序,它使用 argparse
接受命令行参数。这个库有一种自动处理版本标志的方法。我试图弄清楚在我的 main()
函数中访问 version 的最优雅的方式是什么。
#!/usr/bin/env python3
import argparse
def main():
__version__ = '0.1.0'
parser = argparse.ArgumentParser()
parser.add_argument('input',
type=str,
parser.add_argument('-v', '--version',
action='version',
version='%(prog)s ' + __version__
)
args = parser.parse_args()
# main code
print('foo bar')
if __name__ == '__main__':
main()
那么这里最优雅的解决方案是什么?
1) 做我上面做的,然后忍受它。
2) 将 __version__
留在 main()
之外并将其作为参数传递给 main()
(尽管我一直认为在 main()
中使用参数是不好的做法函数)
3) 将 __version__ and all parser setup outside
main()and pass the variable
args` 作为参数留给 main()(又是不好的做法)。
4) 使用全局变量
或者我误认为向 main()
发送参数是不好的做法?或者,我是否完全错过了另一个解决方案?
#!/usr/bin/env python3
import argparse
__version__ = '0.1.0'
def main():
# optionally put this argparse code in its own function
parser = argparse.ArgumentParser()
parser.add_argument('input',
type=str)
parser.add_argument('-v', '--version',
action='version',
version='%(prog)s ' + __version__
)
args = parser.parse_args()
# main code
print(args)
print('foo bar')
if __name__ == '__main__':
main()
测试
1136:~/mypy$ python3 stack57822847.py foobar
Namespace(input='foobar')
foo bar
1136:~/mypy$ python3 stack57822847.py -v
stack57822847.py 0.1.0
我正在创建一个小的 Python 3 程序,它使用 argparse
接受命令行参数。这个库有一种自动处理版本标志的方法。我试图弄清楚在我的 main()
函数中访问 version 的最优雅的方式是什么。
#!/usr/bin/env python3
import argparse
def main():
__version__ = '0.1.0'
parser = argparse.ArgumentParser()
parser.add_argument('input',
type=str,
parser.add_argument('-v', '--version',
action='version',
version='%(prog)s ' + __version__
)
args = parser.parse_args()
# main code
print('foo bar')
if __name__ == '__main__':
main()
那么这里最优雅的解决方案是什么?
1) 做我上面做的,然后忍受它。
2) 将 __version__
留在 main()
之外并将其作为参数传递给 main()
(尽管我一直认为在 main()
中使用参数是不好的做法函数)
3) 将 __version__ and all parser setup outside
main()and pass the variable
args` 作为参数留给 main()(又是不好的做法)。
4) 使用全局变量
或者我误认为向 main()
发送参数是不好的做法?或者,我是否完全错过了另一个解决方案?
#!/usr/bin/env python3
import argparse
__version__ = '0.1.0'
def main():
# optionally put this argparse code in its own function
parser = argparse.ArgumentParser()
parser.add_argument('input',
type=str)
parser.add_argument('-v', '--version',
action='version',
version='%(prog)s ' + __version__
)
args = parser.parse_args()
# main code
print(args)
print('foo bar')
if __name__ == '__main__':
main()
测试
1136:~/mypy$ python3 stack57822847.py foobar
Namespace(input='foobar')
foo bar
1136:~/mypy$ python3 stack57822847.py -v
stack57822847.py 0.1.0