繁体   English   中英

Argparse和命令行语法

[英]Argparse and command line syntax

我正在编写一个程序,该程序带有*.xml*.txt类的文件参数。 例如:

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

例如

python myprog.py -f *.xml

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

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

python myprog.py -f '*.xml'

但是对于许多不同的用户,这将无法正常工作,因为有些用户会忘记使用'

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

问题在于外壳在到达python或argparse之前正在扩展* 尝试转义它,以便外壳程序不会像处理它一样

python myprog.py -f \*.xml

Shell使用*字符来扩展路径名。 如您所知,为防止这种情况,您必须引用它:

python myprog.py -f '*.xml'

如果您希望避免使用引号,则可以使用其他语法,例如类似SQL的语法:

python myprog.py -f %.xml

正如其他人指出的那样,是在甚至没有调用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 ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM