相关疑难解决方法(0)

在Python中从字符串转换为布尔值?

有没有人知道如何在Python中从字符串转换为布尔值?我找到了这个链接.但它看起来不是一个正确的方法.即使用内置功能等.

编辑:

我问这个的原因是因为我int("string")从这里学到了.我试过bool("string")但总是得到True.

>>> bool("False")
True
Run Code Online (Sandbox Code Playgroud)

python string boolean

653
推荐指数
21
解决办法
55万
查看次数

使用argparse时从环境变量设置选项

我有一个脚本,它具有某些选项,可以在命令行上传递,也可以从环境变量传递.如果两者都存在,则CLI应该优先,如果两者都没有,则会发生错误.

我可以检查解析后是否分配了该选项,但我更喜欢让argparse执行繁重的工作并负责在解析失败时显示用法语句.

我已经提出了几种替代方法(我将在下面作为答案发布,以便可以单独讨论),但他们觉得我很笨,我认为我错过了一些东西.

是否有一种被接受的"最佳"方式?

(编辑以在未设置CLI选项和环境变量时清除所需的行为)

python argparse

37
推荐指数
6
解决办法
2万
查看次数

为什么在argparse中,'True'始终为'True'?

这是最简单的Python脚本,名为test.py:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--bool', default=True, type=bool, help='Bool type')
args = parser.parse_args()
print(args.bool)
Run Code Online (Sandbox Code Playgroud)

但是当我在命令行上运行此代码时:

python test.py --bool False
True
Run Code Online (Sandbox Code Playgroud)

而当我的代码读取时'--bool', default=False,argparse正确运行.

为什么?

python argparse

16
推荐指数
1
解决办法
3953
查看次数

Argparse - 不要用'nargs`捕获位置参数.

我正在尝试编写一个函数wo,你可以通过argparse解析可变数量的参数 - 我知道我可以通过这个来做nargs="+".遗憾的是,argparse帮助的工作方式(以及人们通常在CLI中编写参数的方式)将位置参数放在最后.这导致我的位置参数被捕获为可选参数的一部分.

#!/usr/bin/python
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("positional", help="my positional arg", type=int)
parser.add_argument("-o", "--optional", help="my optional arg", nargs='+', type=float)
args = parser.parse_args()
print args.positional, args.optional
Run Code Online (Sandbox Code Playgroud)

运行此以./test.py -h显示以下使用说明:

usage: test.py [-h] [-o OPTIONAL [OPTIONAL ...]] positional
Run Code Online (Sandbox Code Playgroud)

但如果我跑./test.py -o 0.21 0.11 0.33 0.13 100了就给我

test.py: error: too few arguments
Run Code Online (Sandbox Code Playgroud)

为了正确解析args,我必须运行 ./test.py 100 -o 0.21 0.11 0.33 0.13

那么我该怎么做:

  • make argparse重新格式化使用输出,以免误导,或者甚至更好:

  • -o如果它是列表中的最后一个,则告诉argparse不捕获可选参数的最后一个元素

python argument-passing argparse

14
推荐指数
2
解决办法
4078
查看次数

为什么argparse没有正确解析我的布尔标志?

我试图使用argparse模块使我的Python程序接受灵活的命令行参数.我想传递一个简单的布尔标志,并在我的代码中说TrueFalse执行适当的分支.

考虑以下.

import argparse

parser = argparse.ArgumentParser(prog='test.py',formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('-boolflag', type=bool, default=True)
parser.add_argument('-intflag' , type=int, default=3)
args = parser.parse_args()

boolflag = args.boolflag
intflag  = args.intflag


print ("Bool Flag is ", boolflag)
print ("Int Flag is ",  intflag)
Run Code Online (Sandbox Code Playgroud)

当我尝试执行它时,python scrap.py -boolflag False -intflag 314我得到了结果

Bool Flag is  True
Int Flag is  314
Run Code Online (Sandbox Code Playgroud)

为什么是这样?!!似乎正确解析了intflag,但是布尔标志总是被解析为True即使我在命令行参数中明确提到我想要它False.

我哪里错了?

python

9
推荐指数
1
解决办法
8814
查看次数

Argparse 不解析布尔参数?

我正在尝试制作这样的构建脚本:

import glob
import os
import subprocess
import re
import argparse
import shutil

def create_parser():
    parser = argparse.ArgumentParser(description='Build project')

    parser.add_argument('--clean_logs', type=bool, default=True,
                        help='If true, old debug logs will be deleted.')

    parser.add_argument('--run', type=bool, default=True,
                        help="If true, executable will run after compilation.")

    parser.add_argument('--clean_build', type=bool, default=False,
                        help="If true, all generated files will be deleted and the"
                        " directory will be reset to a pristine condition.")

    return parser.parse_args()


def main():
    parser = create_parser()
    print(parser)
Run Code Online (Sandbox Code Playgroud)

然而,无论我如何尝试传递参数,我都只能得到默认值。我总是得到Namespace(clean_build=False, clean_logs=True, run=True)

我努力了:

python3 build.py --run False …
Run Code Online (Sandbox Code Playgroud)

python command-line arguments argparse

9
推荐指数
2
解决办法
1万
查看次数

如何用Python编写布尔命令行参数?

我想在应用程序中编写一个参数,其中我要调用的参数需要在initial_run设置为的脚本的第一次迭代/运行中引用True。否则,此值应保留为false。现在,此参数已在配置文件中配置。

我编写的当前代码如下。在此代码中应更改什么以返回True值?现在,它仅返回值False

import sys  
# main
param_1= sys.argv[0:] in (True, False)
print 'initial_run=', param_1
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
1
解决办法
6546
查看次数

Argparse可选布尔

我正在尝试获得以下行为:

  • python test.py =>存储foo = False
  • python test.py --foo =>存储foo = True
  • python test.py --foo bool =>存储foo = bool

当我使用时有效

    parser.add_argument('--foo',nargs='?', default=False, const=True)
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加type=bool,则尝试将强制转换为布尔值会中断。在这种情况下

python test.py --foo False
Run Code Online (Sandbox Code Playgroud)

实际最终存储foo=True。这是怎么回事??

python argparse python-3.x

6
推荐指数
2
解决办法
7386
查看次数

如何在argparse中管理优先级?

我正在使用argparse管理命令行选项,我想管理两个选项,--check--nocheck.我实际上在做这样的事情mybadscript.py:

[...]
args = parser.parse_args()

if args.check:
    check = True

if args.nocheck:
    check = False
[...]
Run Code Online (Sandbox Code Playgroud)

问题是如果以这种方式启动脚本:

python mybadscript.py --nocheck --check

check将被设置为False.这是不正确的,因为最后一个选项是--check.

我该如何正确管理它们?

PS:我知道你只需要一个选项就可以轻松避免它,但我知道如何管理选项优先级argparse,因为你可以在更复杂的场景中遇到它.

PPS:建议的答案偶然回答了我的问题,但相关问题并不相同.

python python-2.7 argparse

5
推荐指数
1
解决办法
213
查看次数

Luigi:有没有办法从命令行将“false”传递给 bool 参数?

我有一个默认Luigi设置为True的布尔参数的任务:

class MyLuigiTask(luigi.Task):
    my_bool_param = luigi.BoolParameter(default=True) 
Run Code Online (Sandbox Code Playgroud)

当我从终端运行此任务时,有时我想将该参数作为False传递,但得到以下结果:

$ MyLuigiTask --my_bool_param False
error: unrecognized arguments: False  
Run Code Online (Sandbox Code Playgroud)

显然对于false0...

我知道我可以将默认设置为False,然后--my_bool_param如果我想设置为True,则使用该标志,但我更喜欢使用默认值True

有什么办法可以做到这一点,并且仍然从终端传递False

python terminal luigi

5
推荐指数
1
解决办法
850
查看次数