PythonからCGIとしての応答の内容として「 ls 」とかのコマンドを実行してみたかったので、
いろいろ調べてみました。
最終的に対象ディレクトリをlsコマンドを使ってファイル一覧を取得して、
ファイルのリストを返してくれるCGIを作ってみました。
(CGIのテストにいちいちURL打つのがめんどくさかったのさ・・・。いくら履歴があるとはいえ)
思ったよりも便利でラッキーでした。
さてコードです。
コード[Python]
#!/usr/bin/python
# -*- coding: utf-8 -*-
from os import environ
import cgi
import subprocess
#対象ディレクトリのファイルへのリンク作成関数
#引数
#targetdir
# [string]リンクを作成したいディレクトリへのcgi-binからの相対パス。
def LinkGet( targetdir ):
#実行コマンド作成
Command = "ls -F " + targetdir + " | grep -v / |rev | cut -c 2- |rev"
#返り値
OutputText = "<div>\n<h3>" + targetdir + "</h3>\n<ul>\n"
#対象ターゲットに対してlsコマンドを実行
CommandResult = subprocess.check_output(Command,shell=True )
#個別のファイル名称に分割
ResultSplitArr = CommandResult.split("\n")
for ResultCell in ResultSplitArr:
if ResultCell!="":
OutputText += "<li><a href=\"" + targetdir \
+ "/" + ResultCell + "\">" + ResultCell \
+ "</a></li>\n";
OutputText += "</ul>\n</div>\n"
return OutputText
#ファイルリストの作成対象
TargetList = [".","../html"]
#出力用のHTML
ResultHTML = ""
#リスト取得処理
for TargetCell in TargetList:
ResultHTML += LinkGet(TargetCell)
html = '''Content-Type: text/html
<html>
<head>
<title>Contents_List</title>
</head>
<body>
<div>'''
print html;
print ResultHTML;
html ='''</div>
</body>
</html>'''
print html;
|
以下、解説です。
pythonからシェルコマンドを使うときは subprocess をimportして
subprocess.check_output( [コマンド文字列], shell=True)
|
を書きます。
これでシェルコマンドの出力結果は帰ってくるので、「.split()」で分解してhtml文字列に変換します。
CGIの実行ディレクトリはcgi-binなので
lsをほかのフォルダに実行するときは、cgi-binからの相対パスで設定します。
出力結果
上記のコードを記述したCGIにアクセスしてみます。
表示できました。
これで作ったCGIやhtmlコンテンツへのアクセスが簡単になりました。
ご参考になれば幸いです。
0 件のコメント:
コメントを投稿