Python解释器解析正则表达式
在名为generator.py的脚本中,我有以下代码行: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 我的问题是如何获得未解析的命令行字符串 您正在从命令
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