私は愛好家(そしてかなり新しい)プログラマーであり、python)でいくつかの便利な(私にとって)スクリプトを作成して、ファイルのコピー、名前変更、ダウンロードなどのさまざまなシステム自動化タスクを処理しています。活動。
これらのスクリプトをリモートで開始できるようにするいくつかのボタンを表示するだけのシステムの1つから提供されるWebページを作成したいと思います。
問題は、これを行う方法の調査をどこから始めればよいかわからないことです。次のようなスクリプトがあるとしましょう。
file_arranger.py
Webページにそのスクリプトを実行させるには何をする必要がありますか?これは一般消費向けではないので、軽量なものなら何でもいいでしょう。ボーナスポイントについては、そのようなスクリプトからの出力をWebユーザーに提供するために何を調べる必要がありますか?
編集:最初の答えは、これがWin2k3システムであることを含めるのを忘れていることに気づきました。
このページ pythonサイトには、python CGIスクリプトを実行するために必要なことの良い説明と例があります。最初に最も単純なケースから始めます。htmlを出力する短いスクリプトを作成するだけです。
#!/usr/bin/python #on windows change to your path to the python exe
print "Content-Type: text/html" # HTML is following
print # blank line, end of headers
print "<TITLE>CGI script output</TITLE>"
print "<H1>This is my first CGI script</H1>"
print "Hello, world!"
これを初めて試すとき、最も難しいのは通常、スクリプトを配置する場所と、Webサーバーにスクリプトを認識させて実行させる方法を理解することです。 Apache Webサーバーを使用している場合は、 これらの構成手順 を確認してください。
この単純なスクリプトが機能するようになったら、htmlフォームとボタンタグを追加し、actionプロパティを使用して実行するスクリプトを指すようにする必要があります。
この単純なアプローチでは、Python標準ライブラリ以外は何も必要ありません。次のディレクトリ構造を作成してください:
.
|-- cgi-bin
| `-- script.py
|-- index.html
`-- server.py
スクリプトを「cgi-bin」ディレクトリに配置し、「index.html」には「cgi-bin」ディレクトリ内のスクリプトへのリンクが含まれています(したがって、手動で入力する必要はありません)。「server.py "これが含まれています:
import CGIHTTPServer
CGIHTTPServer.test()
サーバーを実行するには、「server.py」を実行するだけです。それだけです。Apacheも他の依存関係もありません。
HTH.。
必要なのは、CGIスクリプトを実行するように設定されたディレクトリにそれを置くことだけです。次に、追加する必要があります。
#!/usr/bin/env python
一番上にあり、リンクすると通常のpythonスクリプトとしてスクリプトを実行する必要があります(HTMLまたはPHPファイル)のように)
もちろん、これは、WebサーバーがCGIを実行するように設定されており、Linuxシステムを使用していることを前提としています。
Mod_pythonやPylonsのようなWebフレームワークのように、もう少し凝ったものが必要な場合は、他の代替ソリューションがありますが、CGIソリューションの方がユースケースに適していると思います。
[編集]
Windowsでは、Apacheを使用している場合、同じ方法を使用できる必要がありますが、#の背後にあるものを置き換えます。次のように、python.exeへのパスを指定します。
#!C:\Python25\python.exe -u
このリンクによると、Pythonをバッファなしモードにするために-uが必要なようです。これには、より詳細な情報もあります: http://www.imladris.com/Scripts/PythonForWindows .html
開始するために必要なのは、単純なcgiスクリプト(またはスクリプトのセット)だけです。他の回答はこれを行う方法をカバーしているので、繰り返しません。代わりに、私はそれを強調しますプレーンテキストを使用すると長い道のりが得られます。ヘッダーを出力し(print("Content-type: text/plain\n")
plus printは、必要な空白行を提供するために独自の改行を追加します)、通常のプログラムを実行します。
このようにして、スクリプトからの通常の出力はすべてブラウザーに送信され、HTML、エスケープ、フレームワークなどについて心配する必要はありません。 「おそらくうまくいく可能性のある最も単純なことをしてください。」
これは、あなたが説明するような非対話型のプライベート管理タスクに特に適しており、最小限の手間でシェルから同一のプログラムを使用できます。ボタンのあるページであるドライバーは、シングルボタンフォームの静的HTMLファイルにすることができます。またはリンクのリストですら。
そこから先に進むには、ロギングモジュールを確認し(たとえば、INFOメッセージをブラウザーに送信するが、コマンドラインには送信しない、またはハンドラーを構成することにより、さまざまなロガーを使用してメッセージを簡単に分類する)、テンプレートエンジンとフレームワークの検討を開始します。 。
独自のHTMLを出力せずに、既存の多くのライブラリの1つを使用するようにスキップします。少し余分に費やしても、頭痛の種を大幅に節約できます。ライブラリを学ぶ時間。または、少なくとも、独自のミニエンジンを効果的に作成して、出力をカプセル化します。
非常に軽い上で実行するように構成できるHTTPリクエストハンドラーとして CherryPy を調べる必要があります [〜#〜] nginx [〜#〜] Webサーバー(または必要に応じてApache)。
その後、CherryPyで実行しているサービスに他のスクリプトをインポートできます。これにより、プロセスを監視し、エラーが発生した場合にそれをキャッチするための制御が少し強化されます。
もう1つのオプションは、os.system()を使用してコマンドをトリガーするようにオペレーティングシステムに指示することです。 例についてはこちらを確認してください os.system()を使用するためのさまざまなアプローチ。
Apacheの使い方を知っているなら、 this 始めるべきです。
以前の質問で、 AJAX WebサイトをPythonに接続する の最小限の実装を求めました。これにより、探していることが達成される可能性があります。いくつかをトリガーするボタンがあります。 Pythonコードを入力し、ページに結果を表示します。私のソリューションはPythonの組み込みWebサーバーを使用しているため、非常に軽量です(追加のパッケージやApacheさえありません)。
これを設定するときは、お願い Webサーバーで何らかのアクションを実行するスクリプトへのアクセスを制限するように注意してください。遅かれ早かれ誰かがそれらを見つけるので、あなたが単にURLを公開しないディレクトリにそれらを置くことは十分ではありません。
少なくとも、これらのスクリプトはパスワードで保護された場所に配置してください。インターネット上の誰もがスクリプトを実行できるようにしたくはありません。
現在Python 3、printを使用している場合は、括弧が必要な関数です。
#!/Python34/python
print ("Content-type: text/html\n")
print ("<html><head>")
print ("</head><body>")
print ("Hello World from Python Script.")
print ("</body></html>")