Argparse和命令行语法

时间:2016-06-23 12:09:15

标签: python argparse

我正在编写一个程序,它接受类似*.xml*.txt之类的文件参数。例如:

parser.add_argument("-f", "--file")
args=parser.parse_args()

e.g。

python myprog.py -f *.xml

然后args.file不会给出命令行字符串*.xml,而是列出的目录列表符合*.xml,但这不是我想要的行为。

所以这是我的问题:有没有办法将`* .xml作为字符串。我知道你可以输入

python myprog.py -f '*.xml'

但是对于很多不同的用户来说这是行不通的,因为有些人会忘记'

换句话说,我需要在命令行中输入的原始文本。

3 个答案:

答案 0 :(得分:5)

问题是shell在进入python或argparse之前正在扩展*。尝试逃避它,以便shell不会像

那样处理它
python myprog.py -f \*.xml

答案 1 :(得分:4)

shell使用CER3字符来扩展路径名。正如您已经发现的那样,为了防止这种情况,您必须引用它:

*

如果您不想引用,可以使用其他一些语法,例如:类似SQL:

python myprog.py -f '*.xml'

答案 2 :(得分:0)

正如其他人所说,在调用python之前,它是进行文件名扩展的shell。

如果它是您经常连续多次使用的那种程序,那么您可以做的最好的事情是避免问题"总是有一个命令的程序提示,或者命令没有传递给它的主要调用。

$ python myprog.py
myprog> -f *.xml   # prompt from python and "-f *.xml" read without any interference
myprog> exit # or your system's end-of-file, control/D on linux.

作为

的替代方案
$ python myprog.py -f \*.xml

对于通常重复使用或交互使用的程序,这是最自然的。例如,psql(Postgres DBM的控制台界面)

$ psql [global options] -c command 1
$
$ psql [global options]
psql> command 1 ;
psql> command 2 ;
相关问题