如何区分字符串和其他参数

时间:2018-07-05 13:26:14

标签: python slack

我正在尝试解析从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'

3 个答案:

答案 0 :(得分:0)

如果要测试args [1]是否为字符串,请使用

if type(args[1]) = str:

答案 1 :(得分:0)

要区分单词字符串非常困难,这主要是因为word IS 一个{{1} }。
如果以string字符串word为例,以"p1"字符串phrase为例,我们可以将"work done"定义为一个集合一个或多个不包含空格的字符,以及word作为一组由空格分隔的单词。

从这个假设开始,我们的phraseargs[1]如果包含至少一个空格(我们应该还应验证它至少包含2个字符...) ,否则为phrase(如果包含至少1个字符),否则出现错误:

word

答案 2 :(得分:0)

Slack总是将完整的用户输入作为一个大字符串返回。因此,您需要实施一个语法分析,以根据语法设计将该字符串转换为参数。

有很多方法可以解决这个问题。我通常使用一种语法,其中使用空格作为分隔符来标识每个参数,并且"可以用于封装较长的句子,其中多个单词作为一个参数。

我猜您最好的方法是使用现有的解析器。例如shlex来解析Slack的输入。

有关shlex如何工作的示例,另请参见this answer