25

私は趣味の(そしてかなり新しい)プログラマーであり、Pythonでいくつかの便利な(私にとって)スクリプトを作成して、ファイルのコピー、名前の変更、ダウンロードなどのさまざまなシステム自動化タスクを処理しています。

これらのスクリプトをリモートで開始できるようにするいくつかのボタンを表示するだけのシステムの1つから提供されるWebページを作成したいと思います。

問題は、これを行う方法の調査をどこから始めればよいかわからないことです。次のようなスクリプトがあるとしましょう。

file_arranger.py

What do I need to do to have a webpage execute that script? This isn't meant for public consumption, so anything lightweight would be great. For bonus points, what do I need to look into to provide the web user with the output from such scripts?

edit: The first answer made me realize I forgot to include that this is a Win2k3 system.

4

9 に答える 9

5

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 フォームとボタン タグを追加し、アクション プロパティを使用して、実行するスクリプトを指定するだけです。

于 2009-01-15T23:16:36.507 に答える
3

この単純なアプローチには、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...

于 2009-01-16T11:55:58.947 に答える
2

必要なのは、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

-u は、このリンクによると、Python を非バッファ モードにするために必要なようです。これには、より詳細な情報もあります: http://www.imladris.com/Scripts/PythonForWindows.html

于 2009-01-15T23:02:23.633 に答える
1

簡単な cgi スクリプト (またはスクリプトのセット) だけで、作業を開始できます。他の回答はこれを行う方法をカバーしているので、繰り返しません。代わりに、プレーン テキストを使用すると大きな効果が得られることを強調します。ヘッダーを出力するだけで(print("Content-type: text/plain\n")さらに、必要な空白行を提供するために print 独自の改行が追加されます)、通常のプログラムを実行します。

このように、スクリプトからの通常の出力はブラウザに送信され、HTML、エスケープ、フレームワークなどについて心配する必要はありません。「うまくいく可能性がある最も簡単なことをしてください。」

これは、あなたが説明したような非対話型のプライベート管理タスクに特に適しており、最小限の手間でシェルから同一のプログラムを使用できます。ドライバー (ボタンを含むページ) は、単一ボタンのフォームを含む静的 HTML ファイルにすることができます。または、リンクのリストです。

そこから先に進むには、ロギング モジュールを確認し (たとえば、コマンド ラインではなくブラウザーに INFO メッセージを送信する、またはハンドラーを構成することにより、さまざまなロガーを使用してメッセージを簡単に分類する)、テンプレート エンジンとフレームワークの検討を開始します。 .

独自の HTML を出力するのではなく、多くの既存のライブラリのいずれかを使用するようスキップしてください。ライブラリの学習に少し余分な時間を費やすだけでも、頭痛の種が大幅に軽減されます。または、少なくとも独自のミニエンジンを効果的に作成して、出力をカプセル化します。

于 2009-01-16T00:05:09.620 に答える
1

非常に軽量なNGINX Web サーバー (または必要に応じて Apache)上で実行するように構成できる HTTP 要求ハンドラーとして、CherryPyを検討する必要があります。

その後、CherryPy で実行しているサービスに他のスクリプトをインポートできます。これにより、プロセスを監視し、エラーが発生した場合にエラーをキャッチするための制御が少し強化されます。

もう 1 つのオプションは、単に os.system() を使用してコマンドをトリガーするようオペレーティング システムに指示することです。 os.system() を使用するさまざまなアプローチの例については、こちらを確認してください。

于 2009-01-15T23:05:05.623 に答える
0

これを設定するときは、Web サーバーで何らかのアクションを実行するスクリプトへのアクセスを制限するように注意してくださいURL を公開しないディレクトリに配置するだけでは十分ではありません。遅かれ早かれ誰かがそれらを見つけるからです。

少なくとも、これらのスクリプトはパスワードで保護された場所に配置してください。インターネット上の誰かがあなたのスクリプトを実行できるようにしたくはありません。

于 2009-01-16T01:26:21.173 に答える
0

Apache の使い方を知っているなら、これで始められるはずです。

于 2009-01-15T23:13:59.943 に答える
0

以前の質問で、AJAX Web サイトを Python に接続するための最小限の実装を求めました。これはあなたが探しているものを達成するかもしれません。いくつかの Python コードをトリガーし、ページに結果を表示するボタンがあります。私のソリューションは Python の組み込み Web サーバーを使用するため、非常に軽量です (追加のパッケージや Apache さえも必要ありません)。

于 2009-01-15T23:15:52.827 に答える