我正在尝试解析从slack发送的python代码中的参数...这意味着什么,当有人在slack中键入命令时,我想根据字符串和其他args进行区分。
例如在松弛中,如果我使用!command inc-number一些字符串,然后有时 !command inc-number word我该如何区分两者
================================================ ===============================
def update(self,*args):
inc = args[0]
id = self.getincsysid(inc) # this func gets the sysid of inc to be update in servicenow.
request = 'api/now/table/incident/'
service_now_url = service now url
url = service_now_url + request + id
headers = {"Accept": "application/json"}
# I am stuck here how to differentiate if args1 is a string.
if args[1] == 'string': #do below
requests.put(url, auth=(user, pwd), headers=headers, json=
{'comments': args})
return 'inc updated'
elif args[1]=='word':
impact = 'imapct1'
criticality= 'urgency1'
requests.put(url, auth=(user, pwd), headers=headers, json={'impact':
impact, 'criticality': urgency})
else:
return 'none matched'
答案 0 :(得分:0)
如果要测试args [1]是否为字符串,请使用
if type(args[1]) = str:
答案 1 :(得分:0)
要区分单词和字符串非常困难,这主要是因为word
IS 一个{{1} }。
如果以string
字符串word
为例,以"p1"
字符串phrase
为例,我们可以将"work done"
定义为一个集合一个或多个不包含空格的字符,以及word
作为一组由空格分隔的单词。
从这个假设开始,我们的phrase
是args[1]
如果包含至少一个空格(我们应该还应验证它至少包含2个字符...) ,否则为phrase
(如果包含至少1个字符),否则出现错误:
word
答案 2 :(得分:0)
Slack总是将完整的用户输入作为一个大字符串返回。因此,您需要实施一个语法分析,以根据语法设计将该字符串转换为参数。
有很多方法可以解决这个问题。我通常使用一种语法,其中使用空格作为分隔符来标识每个参数,并且"
可以用于封装较长的句子,其中多个单词作为一个参数。
我猜您最好的方法是使用现有的解析器。例如shlex来解析Slack的输入。
有关shlex如何工作的示例,另请参见this answer。