通过服务器将字符串发送到python脚本

时间:2014-08-29 00:39:48

标签: python shell scripting

我如何从Android应用程序向我的电脑上的python程序发送字符串(shell脚本文件名),并让python执行在所述字符串中命名的脚本?

我已经完成了python脚本... doThis(./ openNetflix)将运行./openNetflix脚本,正如您可能猜到的那样打开Netflix。

如何配置python服务器来接收字符串并将其传递给我的doThis(scriptNameString)函数?

1 个答案:

答案 0 :(得分:0)

我开始在这个案例上写了一些冗长的评论,但是当你接近字符限制评论时,我想把它转换成答案很好!

执行此任务的最简单方法是使用许多用于创建REST服务的优秀python库之一。我个人最喜欢的是bottle,用瓶子实现这种服务就像这样简单:

from bottle import route, run, template

@route('/execute/<command>')
def execute(command):
    if command == "list_blogs":
        // Do something 1
    elif command == "format_c":
        // Do something 2

run(host='localhost', port=79897)

这不仅会为您提供REST服务,而且还会在用户输入和实际执行之间设置一道防线,因此用户输入不会因您尝试执行的文件而受到损坏。请记住,永远不要在if / else之外的任何地方使用命令变量。

正如您所注意到的那样,这有一个弱点 - 任何拥有此链接的人都可以调用这些功能并可能导致拒绝服务,甚至可能造成实际损害。这就是为什么拥有某种控制和增加安全性的好处,以便知道请求是从有效的客户端发出的。 有很多方法可以解决这个问题,我强烈建议您深入了解这些问题。非常简单的一种方法是在你的服务器上存储密钥和盐的字典,如:

salts["here_you_put_random_hash_as_key"] = "and_here_the_salt"

然后,您还会在客户端代码中存储此特定客户端的salt和密钥。然后,当客户端发出请求时,他将其密钥和校验和(包含由命令生成的md5,客户端盐密钥,例如当前小时)作为附加参数。然后,当您收到请求和所有3个变量时,您尝试使用相同的数据创建自己的校验和(因此您为所提供的客户机密钥选择盐并计算该盐的当前小时和来自客户端的命令的md5)以及它们是否为匹配然后您知道请求有效。