我在 UNIX 机器上有一个带有单个参数(表名)的 python 脚本,我想将其公开给公司内部网上的同事。即我想让来自不同系统的某些用户在特定机器上运行该程序。对此有标准的解决方案吗?
该脚本没有需要显示给用户的输出。同事们拥有所有可能的操作系统,我希望有一个简单、简约的解决方案,任何人都可以使用,并且对我来说很容易安装。像在系统上的 shell/cmd 提示符中键入“telnet 主机名 脚本名 表名”之类的操作就可以用于界面。无需身份验证。当然,我可以创建一个 Web 界面,但对于如此简单的任务来说似乎有些过分了。
如果可以通过 telnet 完成,您能给我举个例子吗?
答案1
这是一个小型独立的示例python3服务器(与 python2 类似)仅显示一个 html 按钮,您可以按下该按钮来生成可用于运行程序的 POST 请求。在这个简单的代码中,实际的 url 被忽略。您应该检查合理的值等。
#!/usr/bin/python3
# http://unix.stackexchange.com/a/315334/119298
from http.server import BaseHTTPRequestHandler, HTTPServer
body = """
<body><form method="post" enctype="multipart/form-data" action="/runcmd">
<input type="submit" name="submit" value="Do Update">
</form>
<hr>
"""
class handlerequest(BaseHTTPRequestHandler):
def do_POST(self):
# run my command. if ok:
reply = "result was ok"
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(bytes(body+reply, "utf8"))
def do_GET(self):
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
self.wfile.write(bytes(body, "utf8"))
server = HTTPServer(('', 80), handlerequest)
server.serve_forever()
如果您已经有一个服务器在端口 80 上侦听,您当然需要更改上述内容。使用 POST 而不仅仅是 GET url 会使浏览器要求用户在刷新时确认帖子。这是具有“副作用”的 CGI 标准。