• 締切済み

pythonでのCGI作成

python で cgiを作成しているのですが、 if f.getfirst('btn1'):  ### 外部スクリプト起動 ###  os.system("python /var/www/cgi-bin/test.py") のように、このボタンが押されたら外部スクリプト起動のようにしたいのですが、どうすればいいでしょうか? たとえば、os.system("mkdir test")のようにすれば、上手くいくのですが、python ~やperl ~のようにすると上手くいきません・・・ (もしかするとapacheの設定か何か必要なのでしょうか?) 初心者丸出しの質問かもしれませんが、よろしくお願いします

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

あとは、ログインして実行するのと、CGIから実行するのとで、アカウントが違うでしょうから、権限や環境変数等に違いがあります。これによって動かない可能性はあります。 test.pyの実行の様子をログに残すなどして、より詳細に何がどう動かないのか調べてみては?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

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

wadayama13
質問者

お礼

回答ありがとうございます。 返信が遅れてしまいもうしわけありません。 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からは出来ないのかもしれないの・・・かな

関連するQ&A