我有用户输入语句,我想分析这些语句的参数。如果可能,使用正则表达式。在
我读了很多关于functools.partial在Stackoverflow上找不到参数解析。同样在Stackoverflow上的regex中,我找不到如何检查匹配项,但排除了使用的标记。Python标记器对我来说似乎很重。在
import re
def getarguments(statement):
prog = re.compile("([(].*[)])")
result = prog.search(statement)
m = result.group()
# m = '(interval=1, percpu=True)'
# or m = "('/')"
# strip the parentheses, ugly but it works
return statement[result.start()+1:result.end()-1]
stm = 'psutil.cpu_percent(interval=1, percpu=True)'
arg_list = getarguments(stm)
print(arg_list) # returns : interval=1, percpu=True
# But combining single and double quotes like
stm = "psutil.disk_usage('/').percent"
arg_list = getarguments(stm) # in debug value is "'/'"
print(arg_list) # when printed value is : '/'
callfunction = psutil.disk_usage
args = []
args.append(arg_list)
# args.append('/')
funct1 = functools.partial(callfunction, *args)
perc = funct1().percent
print(perc)
这将导致错误: builtins.FILENOTFOUND错误:[Errno 2]没有此类文件或目录:“”“/”
但是
^{pr2}$返回(对我来说)20.3这是正确的。 所以这是有区别的。在
奇怪的是,如果我在IDE(wingede)中查看内容,结果是“/”,然后,如果我想查看详细信息,那么结果是'/'
我使用python3.4.0,这里发生了什么,如何解决? 非常感谢你的帮助。在
getarguments("psutil.disk_usage('/').percent")
返回'/'
。例如,您可以通过打印len(arg_list)
来检查这一点。在IDE添加了
"
,因为默认情况下字符串是用单引号'
括起来的。现在有了一个实际包含'
的字符串,因此IDE使用双引号来括住该字符串。在注意,
'/'
不等于"'/'"
。前者是1个字符的字符串,后者是3个字符的字符串。所以为了让事情正确,你需要去掉getarguments
中的引号(包括双引号和单引号)。你可以用下面的片段来做相关问题 更多 >
编程相关推荐