【发布时间】:2014-03-28 01:28:51
【问题描述】:
假设我想制作一个哈希脚本:
### some code here
def hashlib_based(path, htype='md5', block_size=2**16):
hash = eval(htype)
with open(path, 'rb') as f:
for block in iter(lambda: f.read(block_size), ''):
hash().update(block)
f.close()
return hash().hexdigest()
### some code here
如您所见,当我从命令行调用脚本时(例如./myscript.py -sha1 -b 512 some_file.ext),我有机会使用不同的标志来更改哈希类型或块大小。问题是,我不知道我应该如何做到这一点,以保持我的代码尽可能干净和可读。 sys.argv怎么处理?
首先,我如何检查用户是否使用了正确的标志?我需要这样做才能打印出 usage 消息。我是否列出了所有标志的列表,然后检查用户是否使用该列表中的标志?
我应该在 main() 中做所有这些事情还是应该将它们放在不同的函数中?
我应该在标志前面加上连字符减号(例如:-a、-b)还是不加连字符?要检查 sys.argv 中是否存在某个标志,我是否只需执行以下操作:
if '-v' in sys.argv:
verbose = True
?
因为 sys.argv 有索引,忽略标志顺序的最佳方法是什么 - 或者换句话说,./myscript.py -a -b 是否应该与./myscript.py -b -a 相同?虽然它确实使普通用户的工作更容易,但这样做是常见的做法吗?
I saw something similar but for C#.Python中有没有类似的概念? 问题是,尽管这些事情很简单,但它们很快就会失控——至少对我来说是这样。我最终搞得一团糟。您对这个问题的处理方法是什么?
【问题讨论】:
-
@MartijnPieters - 问题解决了!
-
@MartijnPieters 已经完全涵盖了答案。我只想添加docs.python.org/3.3/library/argparse.html :)
标签: python command-line-arguments sys