繁体   English   中英

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

[英]How to differentiate between string and other args

我正在尝试解析从 slack 发送的 python 代码中的参数......这意味着当有人在 slack 中键入命令时,我想根据字符串和其他参数进行区分。

例如,如果我使用 !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'

如果您正在测试 args[1] 是否是字符串,请使用

if type(args[1]) = str:

很难区分一个和一个字符串,主要是因为一个word就是一个string
如果我们作为一个例子word"p1"和一个例子一个phrase字符串"work done" ,我们可以定义一个word为一组不包含空格的一个或多个字符,和一个phrase作为由空格分隔的一组单词。

从这个假设开始,我们的args[1]是一个phrase if 包含至少一个空格(我们还应该验证它包含至少 2 个字符......),否则如果它包含至少 1 个字符,则它是一个word ,否则是有事吗:

if " " in args[1]: #do below 
    requests.put(url, auth=(user, pwd), headers=headers, json= 
{'comments': args})
    return 'inc updated'
elif len(args[1])>0:
    impact = 'imapct1'
    criticality= 'urgency1'
    requests.put(url, auth=(user, pwd), headers=headers, json={'impact': 
impact, 'criticality': urgency})

else:
    return 'none matched'

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

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

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

另请参阅此答案以获取有关 shlex 如何工作的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM