会社のイントラネットの同僚に公開したいUNIXシステムに単一のパラメータ(テーブル名)を持つPythonスクリプトがあります。つまり、他のシステムの特定のユーザーが特定のシステムでプログラムを実行したいとします。これに対する標準的な解決策はありますか?
スクリプトには、ユーザーに表示する必要がある出力はありません。同僚は、可能なすべてのオペレーティングシステムを持っており、私は誰でも利用可能で、インストールも簡単でシンプルで最小限のソリューションを望んでいました。システムのシェル/cmdプロンプトに「telnetホスト名スクリプト名テーブル名」と入力するのと同じ方法がインターフェイスに機能します。認証は不要です。もちろん、Webインターフェイスを作成することもできますが、このような簡単な作業を行うには余りにも過度に思えます。
Telnet経由でできれば、例えば、どうすればいいですか?
ベストアンサー1
以下は、小さなスタンドアロンの例です。python3サーバー(python2に似ています)プログラムを実行するために使用できるPOSTリクエストを生成するために押すことができるhtmlボタンのみを表示します。この単純なコードでは、実際の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を受信しているサーバーがある場合は、もちろん上記を変更する必要があります。 GET URLの代わりにPOSTを使用すると、ブラウザは更新時にユーザーに投稿を確認するように要求します。これは「副作用」を持つCGI標準です。