[英]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.