仅通过Python解析给定命令行的值

时间:2016-09-05 16:52:41

标签: python json mqtt

我发送的是我在Python中通过MQTT收到JSON消息,我想用JSON提供的变量启动一个命令行程序。

问题在于我不知道会有什么价值,因此这就是我遇到麻烦的地方。

最容易的是,如果我知道所有可能发生的变量并做这样的事情:

data = json.loads(msg.payload)
os.system("'command +f ' + data[arg1] + ' +g ' + data[arg2]")

但如前所述,我不知道它们是否被传递,因此,如何将其分解以便命令行命令生成?

也许:

    if 'arg1' in data:
            command = "+f " + data[arg1]
    else:
            pass
    if 'arg2' in data:
            command + "+g " + data[arg2]
    else:
            pass

这会有用吗?有更好的主意吗?

2 个答案:

答案 0 :(得分:1)

您可以使用for循环遍历json,并构造命令字符串。

 commandArgs = ["+f ","+g "]
 commandCount=0
 for element in data:
    command= command + commandArgs[commandCount] + element
    commandCount = commandCount +1

答案 1 :(得分:1)

虽然可以按照描述执行此操作,但这不是应该做的事情。运行用户输入的命令是程序可以做的最不安全的事情之一。彻底清除命令是可能的,但很难全面完成。通常的方法是使用可接受命令的表,与表匹配,然后使用该表中的条目 来填充命令行。用户输入的任何内容都不会使用该方法进入命令行。

如果您希望直接接受用户输入,请务必小心擦除所有特殊字符,首选语言环境之外的字符,双字节字符,路径分隔符等。也许您可以开始使用Jeff提供的代码片段并添加了大量数据清理代码。

另外,请注意,无论您不编码的内容最终将被提交进行处理的概率大致相当于该命令的风险。例如,如果您未能捕获并删除cat ~/.ssh/*,那么您的某个用户将执行它或者有人会闯入并执行此操作。但是如果你没有抓住并删除rm -r /*,那么有人会提交 命令接近确定性的机会。