<p>我会使用argparse来处理这类事情。使用布尔标志参数。我也喜欢提供一个积极的和消极的版本,以便于使用</p>
<pre><code>import argparse
...
if __name__ == "__main__":
parser = argparse.ArgumentParser(prog='log-to-pickle')
parser.add_argument('--imperial-units', dest='imperial_units', action='store_true')
parser.add_argument('--no-imperial-units', dest='imperial_units', action='store_false')
parser.set_defaults(imperial_units=True)
args = parser.parse_args()
log_to_pickle(args.imperial_units)
</code></pre>
<p>使用argparse,您也会收到一些很好的帮助消息:</p>
<pre><code>$ python3 file.py -h
usage: log-to-pickle [-h] [--imperial-units] [--no-imperial-units]
optional arguments:
-h, --help show this help message and exit
--imperial-units
--no-imperial-units
</code></pre>
<p>现在,您可以这样调用应用程序:</p>
<pre><code># These are the same given the default.
$ python3 file.py
$ python3 file.py --imperial-units
</code></pre>
<p>或者做负片:</p>
<pre><code>$ python3 file.py --no-imperial-units
</code></pre>
<hr/>
<p>如果您真的想为bool标志提供一个字符串参数,那么我将创建一个自定义方法来将字符串转换为布尔值:</p>
<pre><code>import argparse
def bool_arg(val):
return val.lower() in ('y', 'yes', 't', 'true', 'on', '1')
if __name__ == "__main__":
parser = argparse.ArgumentParser(prog='log-to-pickle')
parser.add_argument('--imperial-units', type=bool_arg, default=True)
args = parser.parse_args()
print(args.imperial_units)
</code></pre>
<p>示例:</p>
<pre><code>$ python3 file.py --imperial-units y
True
$ python3 file.py --imperial-units True
True
$ python3 file.py --imperial-units 0
False
</code></pre>