Python解释器解析正则表达式

Python解释器解析正则表达式,python,Python,在名为generator.py的脚本中,我有以下代码行: arg='' for i,a in enumerate(sys.argv): if(i!=0): arg+=a+" " 如果我打印arg,我可以看到shell参数减去脚本名称 这很好,但是如果a使用正则表达式行*.h,我发现解释器为我解决了这个规则,并且dispite*.h打印a,我可以看到: file.h file2.h .... filen.h 我的问题是如何获得未解析的命令行字符串 您正在从命令

在名为generator.py的脚本中,我有以下代码行:

    arg=''

for i,a in enumerate(sys.argv):
    if(i!=0):
        arg+=a+" "
如果我打印arg,我可以看到shell参数减去脚本名称

这很好,但是如果a使用正则表达式行*.h,我发现解释器为我解决了这个规则,并且dispite*.h打印a,我可以看到:

file.h file2.h .... filen.h

我的问题是如何获得未解析的命令行字符串

您正在从命令行调用脚本,该命令行为您解析glob并将结果传递给python脚本

如果不希望命令行解析glob,只需转义通配符
*

您的shell正在将
*
扩展为其通配符的含义

可能的解决方案是将
“*.h”
“*.h”
\*.h
从命令行传递到脚本,脚本将接收准确的
*.h
字符串

正如@Spoonmiser所建议的,您可以使用以下命令检查脚本接收到的内容:

echo script.py arg1 arg2 blahblah
这将打印回glob扩展后的有效名称,并让您了解发生了什么


还要感谢@Spoonmiser为本例提供了glob的概念,您可以从命令行调用该脚本,它为您解析glob并将结果传递给python脚本,从而更详细地了解该脚本

如果不希望命令行解析glob,只需转义通配符
*

您的shell正在将
*
扩展为其通配符的含义

可能的解决方案是将
“*.h”
“*.h”
\*.h
从命令行传递到脚本,脚本将接收准确的
*.h
字符串

正如@Spoonmiser所建议的,您可以使用以下命令检查脚本接收到的内容:

echo script.py arg1 arg2 blahblah
这将打印回glob扩展后的有效名称,并让您了解发生了什么


还要感谢@Spoonmiser为本例提供了glob的概念,您可以更详细地查看

我的猜测是您可能无法捕捉到它-脚本的参数在传递给sys.argv之前在操作系统级别上得到解析

我的猜测是,您可能无法捕捉到它-脚本的参数在传递到sys.argv之前在操作系统级别上得到解析

我认为,演示此问题的最佳方法是在命令行中输入类似的内容:
echo myscript.py*.h
,这将显示shell在脚本实际运行之前如何解释它。还值得指出的是,这是一个glob,而不是regex。从未想过
echo myscript.py*.h
,这很好。直到现在,我也不知道什么是
glob
(只是称为everythingregexp),谢谢!我认为这应该被标记为一个答案,@P.carlinoth我认为,演示这个问题的最好方法是在命令行中输入类似的内容:
echo myscript.py*.h
,这将显示shell在脚本实际运行之前是如何解释它的。还值得指出的是,这是一个glob,而不是regex。从未想过
echo myscript.py*.h
,这很好。直到现在,我也不知道什么是
glob
(只是称为everythingregexp),谢谢!我认为这应该被标记为一个答案,@P.Carlino