我有用户输入语句,我想解析参数。如果可能的话使用正则表达式。
我已经在Stackoverflow上阅读了很多关于functools.partial的内容,我找不到参数解析。另外在Stackoverflow的正则表达式中,我找不到如何检查匹配,但排除使用的标记。为了我的目的,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.FileNotFoundError:[Errno 2]没有这样的文件或目录:“'/'”
但是
callfunction = psutil.disk_usage
args = []
#args.append(arg_list)
args.append('/')
funct1 = functools.partial(callfunction, *args)
perc = funct1().percent
print(perc)
返回(对我而言)20.3这是正确的。 所以有一些区别。
奇怪的是,如果我在IDE(WingIDE)中查看内容,结果为“'/'”,然后,如果我想查看详细信息,那么结果为'/'
我使用Python 3.4.0这里发生了什么,以及如何解决? 非常感谢您的帮助。
答案 0 :(得分:1)
<div>
返回getarguments("psutil.disk_usage('/').percent")
。例如,您可以通过打印'/'
来检查这一点。
您的IDE会添加len(arg_list)
,因为默认字符串包含在单引号"
中。现在你有一个实际包含'
的字符串,因此IDE使用双引号括起字符串。
注意,'
不等于'/'
。前者是1个字符的字符串,后者是3个字符的字符串。因此,为了使事情正确,您需要在"'/'"
中删除引号(包括双引号和单引号)。您可以使用以下代码段
getarguments