社区首页 >问答首页 >如何解析脚本中的布尔参数?

如何解析脚本中的布尔参数?
EN

Stack Overflow用户
提问于 2013-07-25 04:24:37
回答 3查看 4.1K关注 0票数 1

下面的函数和用法示例正好说明了这种用法所需的内容:

test([{True | False}])

代码语言:javascript
代码运行次数:0
复制
>>> def test(arg=True):
...     if arg:
...         print "argument is true"
...     else:
...         print "argument is false"
...
>>> test()
argument is true
>>> test(True)
argument is true
>>> test(False)
argument is false
>>> test(1)
argument is true
>>> test(0)
argument is false
>>> test("foo")
argument is true
>>> test("")
argument is false
>>>

现在,我希望使用完全相同的用法和行为,但使用命令行解析,即使用此用法:

python test [{True | False}]

所以我试着用这样的方法来解决这个问题:

代码语言:javascript
代码运行次数:0
复制
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-arg",
    help="I want the usage to be [{True | False}] (defaults to True)")
arg = parser.parse_args().arg

if arg:
    print "argument is true"
else:
    print "argument is false"

但我搞不懂。我尝试了各种选项和各种选项的组合,其中包括action="store_true"default=Truechoices=[True, False]type=bool,但没有任何选项像我所希望的那样工作,例如:

代码语言:javascript
代码运行次数:0
复制
$ python test.py -h
usage: test.py [-h] [-arg ARG]

optional arguments:
  -h, --help  show this help message and exit
  -arg ARG    I want the usage to be [{True | False}] (defaults to True)

$ python test.py
argument is true

$ python test.py True
usage: test.py [-h] [-arg ARG]
test.py: error: unrecognized arguments: True

etc.

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-27 21:17:17

查找或编写一个解析字符串的函数,如“True”、“False”。例如,strings

代码语言:javascript
代码运行次数:0
复制
def ParseBoolean (b):
    # ...
    if len(b) < 1:
        raise ValueError ('Cannot parse empty string into boolean.')
    b = b[0].lower()
    if b == 't' or b == 'y' or b == '1':
        return True
    if b == 'f' or b == 'n' or b == '0':
        return False
    raise ValueError ('Cannot parse string into boolean.')

把它看作是int()float()的布尔等价物,然后使用它作为参数type

代码语言:javascript
代码运行次数:0
复制
p.add_argument('foo',type=ParseBoolean)

bool()不能工作,因为它解释为False的唯一字符串是''

票数 2
EN

Stack Overflow用户

发布于 2013-07-25 04:46:29

如果您给参数一个以"-“开头的名称,它将成为标志参数。正如您从“使用”中看到的,它例外地称为test.py -arg True

如果您不想将-arg放在参数本身之前,您应该将它命名为arg,因此它将成为一个位置参数。

参考资料:http://docs.python.org/dev/library/argparse.html#name-or-flags

此外,在默认情况下,它将将参数转换为字符串。所以if arg:不起作用。结果将与调用if "foo":相同。

如果您希望能够在命令行中键入TrueFalse,您可能希望将它们保持为字符串,并使用if arg == "True"。Argparse支持布尔参数,但据我所知,它们只支持以下形式:test.py --arg在arg=true中的结果,而只有test.py将导致arg=false

参考资料:http://docs.python.org/dev/library/argparse.html#type

票数 1
EN

Stack Overflow用户

发布于 2013-07-25 23:51:22

多亏了瓦雷萨,他让我找到了这个解决方案:

代码语言:javascript
代码运行次数:0
复制
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("arg",
    nargs="?",
    default="True",
    help="I want the usage to be [{True | False}] (defaults to True)")
arg = parser.parse_args().arg

if arg == "True":
    arg = True
elif arg == "False":
    arg = False
else:
    try:
        arg = float(arg)
        if arg == 0.:
            arg = True
        else:
            arg = False
    except:
        if len(arg) > 0:
            arg = True
        else:
            arg = False

if arg:
    print "argument is true"
else:
    print "argument is false"

然而,在我看来,这是相当复杂的。我是哑巴(我是Python新手),还是有一种更简单、更直截了当、更优雅的方式来做到这一点?一种类似于函数处理它的非常简单的方式的方法,如最初的公告所示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17857965

复制
相关文章
关于 title 属性导致触发 mousedown 事件时连带触发 mousemove
  大家都知道,鼠标点击的整个事件的执行流程是:mousedown -> mouseup -> click ,而拖放的整个流程是:mousedown -> mousemove -> mouseup -> click
胡尐睿丶
2022/03/28
1.3K0
input输入中文时,拼音触发input事件
在上一篇文章中写到了函数防抖,在使用函数防抖来进行搜索框优化的时候会遇到一个问题,就是监听文本输入框的input事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中时会触发input事件,会出现下图的效果
OECOM
2020/07/01
8.2K1
jQuery 双击事件(dblclick)时,不触发单击事件(click)
在jQuery的事件绑定中,执行双击事件(dblclick)时能触发两次单击事件(click)。即一个标签元素(如div等),如果元素同时绑定了单击事件(click)和双击事件(dblclick),那么执行单击事件(click)时,不会触发双击事件(dblclick), 执行双击事件(dblclick)时却会触发两次单击事件(click)。 先看一下点击事件的执行顺序:
飞奔去旅行
2019/06/13
5.3K0
Jenkins触发构建--事件触发
事件触发就是发生了某个事件就触发pipeline执行,这个事件可以是你能想到的任何事件,比如手动在界面上触发、其它job主动触发、HTTP API Webhook触发等。
陈不成i
2021/06/02
5.9K0
当提到“事件驱动”时,我们在说什么?
去年年底(2016年底),我和ThoughtWorks同事一起参加了一个研讨会,讨论“事件驱动”的本质。在过去的几年里,我们构建的很多系统都大量使用了事件。对于这些系统,人们常常赞誉有加,但批评的声音也不绝于耳。我们的北美办公室组织了一次峰会,来自世界各地的ThoughtWorks资深开发者出席会议并分享了他们的想法。
ThoughtWorks
2019/05/05
5150
当提到“事件驱动”时,我们在说什么?
双击事件(dblclick)时,不触发鼠标按下(mousedown) 动作事件
在一个dom节点的事件绑定中,如果同时绑定了dblclick和mousedown那么想要执行双击事件(dblclick)时能就会触发两次mousedown事件。
李维亮
2023/10/23
7410
双击事件(dblclick)时,不触发鼠标按下(mousedown) 动作事件
代码触发,手动触发touchstart事件,touch事件,click事件,自定义事件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/150775.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
4.9K0
zabbix中配置当memory剩余不足20%时触发报警
在zabbix中默认当内存剩余量不足2G的时候触发报警,并没有使用百分比来触发如下: 现在需要配置:当memory剩余不足20%时触发报警,具体操作方法如下: 1)创建item Configurati
洗尽了浮华
2018/01/23
1.4K0
zabbix中配置当memory剩余不足20%时触发报警
onbeforeunload事件_pageload事件何时触发
注意:为了防止不需要的弹出窗口,浏览器可能不会显示在beforeunload事件处理程序中创建的提示,除非页面已与之交互,甚至根本不显示它们。
全栈程序员站长
2022/11/03
3K0
aos 事件触发失败
项目中遇到这个问题,网页往下滑动时加载 aos 事件触发不了,原因也很简单,因为 aos.js 是在页面加载时获取页面高度从而绑定一些事件进去,但是如果这个文件加载速度比框架加载的快,会导致两者高度不一致,从而动画效果触发失败。
子舒
2023/08/23
3620
js触发全屏事件
让用户端JS触发指的就是让用JS监听用户的操作事件,通过JS程序去实现F11全屏。这个事件可以是一个按钮的点击事件,当然也可以是键盘事件,比如用户按下F11。     1.F11键盘事件触发   当用户按下F11事件,浏览器为触发自身全屏功能,这个过程我们一般是不可控制的,即使是监听了F11的键盘事件,退出全屏的时候,我们也捕捉不到退出全屏触发的事件。所以,我们就用程序自己去实现F11的功能,首先需要禁用浏览器默认的事件动作。
山河木马
2019/03/05
16K0
vue 加载页面时触发时间_Vue 刷新页面时会触发事件吗「建议收藏」
使用localstorage做本地存储,然后我想在刷新页面或者离开页面的调用localstorage方法
全栈程序员站长
2022/09/27
1.6K0
Bootstrap- Modal对话框如何在关闭时触发事件
下表列出了模态框中要用到事件。这些事件可在函数中当钩子使用。 事件 描述 实例 show.bs.modal 在调用 show 方法后触发。 $('#identifier').on('show.bs.modal', function () { // 执行一些动作... }) shown.bs.modal 当模态框对用户可见时触发(将等待 CSS 过渡效果完成)。 $('#identifier').on('shown.bs.modal', function () { // 执行一些动作... }) hide
johnhuster的分享
2022/03/28
2K0
输入框在输入中文时回车误触发输入的回车事件
这个问题出现在:chatx.me的输入框 最近反应的人比较多,然后还是问了下前前端同事,解决了。
SingYi
2023/08/23
3060
js 手动触发input事件
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/138867.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/02
10.7K0
spreadTrading模块事件触发机制
本文主要介绍了价差交易模块的事件触发机制。感谢‘次第花开’和‘用户名呀’在维恩的派论坛里的分享!
用Python的交易员
2018/07/26
2.5K0
spreadTrading模块事件触发机制
探索 Flutter 模拟事件触发
如果可以模拟 PointerEvent 进行分发,那么在应用中就可以通过 代码 来触发手势事件,这样就能解放双手。如果结合语音监听,通过代码处理,说话也能触发手势操作,岂不美哉。 作为探索完 手势机制 和 滑动机制 ,又有完成这两本小册的我,感觉这个问题应该可解。下面就将整个问题的解决过程进行梳理,带大家再认识一下手势底层的相关实现。
张风捷特烈
2022/03/18
2.8K0
探索 Flutter 模拟事件触发
WdatePicker改变事件触发优化
如上,使用onpicked来绑定blur事件,就会在选择日期后自动触发onchangge事件
用户9131103
2023/07/17
3120
js后退按钮事件触发
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/164172.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
10.6K0
checkbox选中触发事件_jquery select change事件
<asp:DataGrid id=”DataGrid1″ runat=”server” AutoGenerateColumns=”False”> <Columns> <asp:BoundColumn DataField=”txtId”></asp:BoundColumn> <asp:BoundColumn DataField=”txtName”></asp:BoundColumn> <asp:TemplateColumn> <ItemTemplate> <asp:ImageButton id=”btnItem” runat=”server” CommandName=”LookDetail”></asp:ImageButton> <asp:DropDownList id=”ddl” runat=”server” AutoPostBack=”True”> <asp:ListItem Value=”asdf”>asdf</asp:ListItem> <asp:ListItem Value=”asdfasdf”>asdfasdf</asp:ListItem> <asp:ListItem Value=”wrwwewewee”>wrwwewewee</asp:ListItem> </asp:DropDownList> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid>
全栈程序员站长
2022/10/01
4.2K0

相似问题

当队列几乎满时触发事件

11

当mediaPlayer停止时触发事件

20

当繁忙时,jqm停止点击事件队列。

33

当vimeo视频停止播放时触发事件?

32

Dropzone.js事件不触发

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档