我正在编写一个程序,它接受类似*.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'
但是对于很多不同的用户来说这是行不通的,因为有些人会忘记'
。
换句话说,我需要在命令行中输入的原始文本。
答案 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 ;