我在文件'bin/test'中有一个简单的python脚本:
#!/usr/bin/env python
import argparse
PROGRAM_NAME = "name"
PROGRAM_VERSION = "0.0.1"
PROGRAM_DESCRIPTION = "desc"
parser = argparse.ArgumentParser(prog=PROGRAM_NAME, description=PROGRAM_DESCRIPTION)
parser.add_argument('--version', action='version', version='%(prog)s ' + PROGRAM_VERSION)
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
当我用--versionparam 运行它,或者--help,它打印一切OK:
$ bin/test --version
name 0.0.1
$ bin/test --help
usage: name [-h] [--version]
desc
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
Run Code Online (Sandbox Code Playgroud)
当我使用文件运行时subprocess.check_output,它没有得到任何东西:
>>> subprocess.check_output(["bin/test", "--help"], stderr=subprocess.STDOUT, shell=True)
''
>>> subprocess.check_output(["bin/test", "--version"], stderr=subprocess.STDOUT, shell=True)
''
Run Code Online (Sandbox Code Playgroud)
我正在使用带有Python版本的Ubuntu 11.10: …
我有一个python程序,它运行取决于一些参数.比方说,其中一个参数C的默认值为3.因此,当我在没有任何参数的情况下运行它时,它会
$ python parsing.py
C=3
Run Code Online (Sandbox Code Playgroud)
当我为初始数据加载文件时,它可以从该文件中获取一些参数值.例如,如果我的文件MakeC5说程序应该运行C=5,我会得到
$ python parsing.py --file=MakeC5
C=5
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我将C的不同值指定为可选参数,则采用该值,并且优先于文件中的值.
$ python parsing.py --C=4
C=4
$ python parsing.py --file=MakeC5 --C=4
C=4
Run Code Online (Sandbox Code Playgroud)
到这里,我可以检查命令行上指定的值是否与默认值不同,否则从文件中取出一个,如同
if parameters.C == parser.get_default('C'):
parameters.C = load_file(parameters.file)["C"]
Run Code Online (Sandbox Code Playgroud)
但是,如果我在命令行中给出C的默认值,则此方法不起作用
$ python parsing.py --file=MakeC5 --C=3
C=3
Run Code Online (Sandbox Code Playgroud)
我该如何处理这个案子呢?有没有一种方法不需要像在中那样解析命令行两次
parameters = parser.parse_args()
parameters_from_file = load_file(parameters.file)
parser.set_defaults(**parameters_from_file)
parameters = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
对我来说这看起来不像"明显的pythonic方式"吗?这是准读取可以指定为参数的配置文件,所以我希望有一个好方法.
我有这样的解析器
parser = argparse.ArgumentParser()
parser.add_argument('--template', metavar='FILE', nargs=1, required=True)
Run Code Online (Sandbox Code Playgroud)
并传递这样的参数
myprog --template template.txt
Run Code Online (Sandbox Code Playgroud)
但是当我后来检查args从中获得的时候args = parser.parse_args()我会得到
['template.txt']
Run Code Online (Sandbox Code Playgroud)
我可以换平原'template.txt'吗?谢谢.
我在我的python程序中遇到问题,我有两个可选参数,问题是必须至少有一个这两个参数必须使用但是两个参数不能一起传递,有没有办法这样做与argparse?
这是我目前使用的代码:
parser = argparse.ArgumentParser(description='worker')
arser.add_argument('-i', "--item", type=bool, default=False, required=False)
parser.add_argument('-o', "--offer", type=bool, default=False, required=False)
Run Code Online (Sandbox Code Playgroud)
以下是我希望如何工作的一些示例:
./main.py -i True =>好的
./main.py -o True =>好的
./main.py -o True -i True =>不行
我有一个脚本,必须输入密码.这适用于大多数密码,除了"好"密码,我得到奇怪的结果.
#! /usr/local/bin/python
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-t", "--test")
print(parser.parse_args())
Run Code Online (Sandbox Code Playgroud)
并称之为
./test.py -t test$$test
Run Code Online (Sandbox Code Playgroud)
将打印
Namespace(test='test5365test')
Run Code Online (Sandbox Code Playgroud)
shell将密码视为一个特殊的charakter.
我的问题是,如果有一种方法可以在我的代码中禁用它而不强制用户正确地转义字符?
我正在学习 argparse 模块,我编写的代码如下:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print args.accumulate(args.integers)
Run Code Online (Sandbox Code Playgroud)
我将它保存为 argparse.py,但是当我在 cmd 中运行它时,它显示:
AttributeError: 'module' 对象没有属性 'ArgumentParser'
有什么问题吗?谢谢你的帮助
我是python的新手。我正在编写一个计算单词、行和字符的程序。当我尝试使用命令行开关时,我开始遇到问题:-w、-l、-c,直到那时一切正常。
我阅读了有关 argparse 的 stackoverflow 和 python 文档的帖子,但我现在不知道如何实现 argparse 库以及与它一起使用的代码。
当我跑 python wc.py file.txt --l
我得到
太多值无法解压缩
有人可以帮我解决这个问题吗?
from sys import argv
import os.path
import argparse
script, filename = argv
def word_count(filename):
my_file = open(filename)
counter = 0
for x in my_file.read().split():
counter += 1
return counter
my_file.close()
def line_count(filename):
my_file = open(filename, 'r').read()
return len(my_file.splitlines())
my_file.close()
def character_count(filename):
my_file = open(filename, 'r').read()
return len(my_file)
my_file.close()
parser = argparse.ArgumentParser()
parser.add_argument('--w', nargs='+', help='word help')
parser.add_argument('--l', nargs='+', help='line help')
parser.add_argument('--c', nargs='+', help='character …Run Code Online (Sandbox Code Playgroud) 我正在使用argparse作为我正在编写的python脚本.该脚本的目的是处理存储表格数据的大型ascii文件.该脚本只为我编写的类提供了一个方便的前端,允许在表格数据上进行任意数量的即时剪切.在类中,用户可以传入一个变量名关键字参数,其中包含绑定到变量的两元素元组.元组定义任何列的下限和上限,其名称对应于variable-name关键字.例如:
reader = AsciiFileReducer(fname, mass = (100, float("inf")), spin = (0.5, 1))
Run Code Online (Sandbox Code Playgroud)
然后,此读取器实例将忽略输入fname的所有行,但质量> 100且0.5 <spin <1的那些行除外.输入fname可能有许多其他列,但只有质量和旋转会对它们进行切割.
我希望我写的脚本保留此功能,但我不知道如何允许使用argparse.add_argument添加带有变量名称的参数.我的类允许任意数量的可选参数,每个参数都有未指定的名称,其中为名称选择的字符串本身就是有意义的.python的**kwargs特性使这成为可能.argparse有可能吗?
我有一个Python程序,它只能是某些字符串,标志rock,paper或scissors.Python argparse有一个很好的方法来实现它,使用choices容器的参数允许值.
以下是文档中的示例:
import argparse
...
parser = argparse.ArgumentParser(prog='game.py')
parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
parser.parse_args(['rock'])
### Namespace(move='rock')
parser.parse_args(['fire'])
### usage: game.py [-h] {rock,paper,scissors}
### game.py: error: argument move: invalid choice: 'fire' (choose from 'rock','paper', 'scissors')
Run Code Online (Sandbox Code Playgroud)
我想实现choices这样的选择不区分大小写,即用户可以输入RoCK并且它仍然有效.
这样做的标准方法是什么?
我正在编写一个简单的脚本,用于解析存储在AWS CloudWatch上的JSON文件的内容.我已经在脚本中添加了一个接受用户输入的参数解析器,并允许用户将文件的输出打印到屏幕上(以预定的方式),或允许他们将内容输出到本地JSON文件.这是一个让我难以理解的片段:
import argparse
parser = argparse.ArgumentParser(description="Process a log file")
parser.add_argument('-o', '--output', choices=[???, 'print'],
default='print', help='Specify logfile output path or print to screen')
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
我的问题源于这parser.add_argument条线,特别是choices论证.我想为这个标志允许两个输入,它们是print本地机器上的一个或一些有效路径.我希望当前标记为问号的选项是Python可以识别的PATH.
有没有办法,使用argparse来指定一个标志的参数之一必须是一个PATH?到目前为止,搜索结果尚无定论.
提前致谢!