プロが教えるわが家の防犯対策術!

python で cgiを作成しているのですが、

if f.getfirst('btn1'):
 ### 外部スクリプト起動 ###
 os.system("python /var/www/cgi-bin/test.py")

のように、このボタンが押されたら外部スクリプト起動のようにしたいのですが、どうすればいいでしょうか?
たとえば、os.system("mkdir test")のようにすれば、上手くいくのですが、python ~やperl ~のようにすると上手くいきません・・・
(もしかするとapacheの設定か何か必要なのでしょうか?)

初心者丸出しの質問かもしれませんが、よろしくお願いします

A 回答 (2件)

あとは、ログインして実行するのと、CGIから実行するのとで、アカウントが違うでしょうから、権限や環境変数等に違いがあります。

これによって動かない可能性はあります。


test.pyの実行の様子をログに残すなどして、より詳細に何がどう動かないのか調べてみては?
    • good
    • 0

そこのos.systemで何をするかわかりませんが



・os.systemではなく、subprocessモジュールを使う
・pythonをフルパスで指定する
・組込み関数__import__を使って、モジュールとしてimportする。test.pyはモジュール用に書く
・組込み関数execfileを使って実行する。test.pyはそれを考慮したものに直す

あたりが候補となります
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
返信が遅れてしまいもうしわけありません。

os.system("python /var/www/cgi-bin/test.py")とありますが、
(当然python /var/www/cgi-bin/test.pyと端末上で実行すると動きます。)

test.pyはCiscoIOSデバイスにtelnet接続し、設定を行うスクリプトとなっております。
このスクリプトをボタンが押された時に実行という形にしたいと思っています。

kmeeさんが提案してくれたような方法も試したのですが、駄目でした。

後、いろいろ試したなかでmkdir testと実行するスクリプト(test111.py)を作成し、
os.system("python /var/www/html/test111.py")とすると無事に動きました

また、シェルスクリプトを作成し(cmds.shとする)、/var/www/html/cmds.sh | telnet [IPアドレス]のように
実行すると端末上では起動するのですが、それらをCGIに組み込むとやはり動きません。

完全に手詰まりになってしまいました。
そもそもCGIからは出来ないのかもしれないの・・・かな

お礼日時:2012/01/26 16:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!