• 締切済み

pythonでのCGI作成

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

  • CGI
  • 回答数2
  • ありがとう数2

みんなの回答

  • 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

  • Pythonを用いてCGIを作る勉強をしています。

    Pythonを用いてCGIを作る勉強をしています。 さて、CGIHTTPServerでCGIのテストをしようとしたところ、ぜんぜん動いてくれません。ちゃんとファイルのパーミッションも755にしました。 自分の力だけではどうにもならなかったため、ここで質問させてもらいます。 どうしたらよいのでしょうか。 僕がつくったPythonのソース test.pyは #! /usr/bin python print "Content-type: text/html\n" print "<html><body>Hello!</body></html>" です。 本来ならブラウザで「http://127.0.0.1:8000/cgi-bin/test.py」 とすれば動いてくれるはずなのに以下のようなエラーメッセージが出ます。 localhost - - [19/May/2010 23:46:43] "GET /cgi-bin/test3.py HTTP/1.1" 200 - Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/CGIHTTPServer.py", line 255, in run_cgi OSError: [Errno 13] Permission denied localhost - - [19/May/2010 23:46:43] CGI script exit status 0x7f00 PCの環境はMacOSX10.6です。 だれか分かる方。教えていただけないでしょうか?? よろしくお願いします。

    • 締切済み
    • CGI
  • MAMPでpythonを実行させたい

    OSX10.8を使っています http://www.python.jp/Zope/download/pythoncore python-2.7.3-macosx10.6.dmg(32bit/64bit両用) これをインストールしました 以下の記述を test.pyとして保存し #!/usr/bin/env python print "Content-type: text/html\n" print "<html><body>Python is awesome !</body></html>" MAMPを起動しtest.pyを表示させると #!/usr/bin/env python print "Content-type: text/html\n" print "<html><body>Python is awesome !</body></html>" がそのままブラウザに表示されます application/mamp/conf/apache/httpd.confを開いて #AddHandler cgi-script .cgiのコメントを外し AddHandler cgi-script .cgi .py としapacheを再起動させtest.pyを表示させると インターナルサーバーエラーになりました 何をやり残しているのか、解決方法、または参考になるページを教えて下さい よろしくお願いします

  • pythonスクリプト実行不可

    pythonスクリプトをCGIとして動作させるとエラーになります。 環境は、 OS : CentOS 6.4 Python : 2.6.6 pythonソースは、 #!/usr/bin/python # coding: utf-8 print "Content-type: text/html; charset=UTF-8" print print ブラウザーから、このCGIを直接起動すると、/var/log/httpd/error_logに下記のエラーが出ます。 [Fri Oct 18 12:45:28 2013] [error] [client 10.1.34.89] (8)Exec format error: exec of '/home/httpd/cgi-bin/test.py' failed Exec format errorとは、何でしょうか? perl CGIは、正常に動作しているのですが。 アドバイスよろしくお願いします。

  • pythonのCGIでページを遷移したい

    PythonのCGIserverを使っています。 /cgi-bin/hoge.py から /cgi-bin/foo.py へとページを遷移させたいのですが、うまくいきません。 どうすればいいですか? 以下、hoge.pyのソースです。 #!/usr/local/bin/python # coding: utf-8 (中略) print "Location: /cgi-bin/foo.py\n\n" 他の方法として、 import foo として、fooの関数やメソッドを呼ぶことも考えたのですが、 これもうまくいきません。。

    • 締切済み
    • CGI
  • アパッチやプロバイダのcgi-bin

    ディレクトリにおいてある PerlなどのCGIスクリプトが使う テキストデータ(jouhou.dat)は外部から 見られる心配はないのでしょうか? アパッチの /var/www/cgi-bin/jouhou.dat にアクセスするために 他のパソコンから http://192.168.1.2/cgi-bin/jouhou.dat (192.168.1.2はアパッチが動いているPC) とすればブラウザが表示拒否されました

    • ベストアンサー
    • Perl
  • centos python

    以前WindowsでPythonのWebプログラムを書いていました。 webサーバーはapacheを利用しています。 そちらをcentOS(apache)に持って行きたいです。 ↓↓↓↓こちらがwindowsでのスクリプトです #! C:/Python27/python # coding: utf-8 temple_body= u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>Pythonタイトル</title> </head> <body> <h1>Python テンプレート</h1> テンプレートです</br> </body> </html>""" try: print "Content-type: text/html;charset=utf-8\n" print ( temple_body.format() ).encode('utf-8') except Exception as e: print e ただテンプレートと表示されるだけのものです。 この1行目の #! C:/Python27/python を #! /usr/bin/python2.7 と直したところ サイトは開けず 500 Internal Server Error が、 エラーログには以下のようなものが出ていました。 End of script output before headers: index.py AH01215: (13)Permission denied: exec of '/var/www/html/index.py' failed #! /usr/bin/python2.7の部分が問題だと思うのですが どのように直せばいいのかがわかりません。 windowsの時は.exeを探し、Pathを指定しました。 しかし、centosでpython.exeに相当するものがどこにあるのか分りません。 centosの場合どのようなぱすを指定すれば良いのでしょうか?

  • pythonで作ったCGIでREMOTE_HOSTを得る方法

    apache + python2.4を使っています。mod_pythonは使ってません。 pythonでCGIを作りました。その中で環境変数REMOTE_HOSTを得たいと 思っていますが、os.environモジュールからは得られません。 os.environ["REMOTE_HOST"] CGIの中で REMOTE_HOST を得る方法を教えていただけませんか?

  • python: fork後の標準出力について

    言語はpythonです。(バージョン : 2.6.6) 以下の二つの単純なpythonスクリプト   test.py, exe_fork.py があります。 [test.py] #!/usr/bin/env python import subprocess proc = subprocess.Popen("./exe_fork.py", stdout=subprocess.PIPE) result = proc.stdout.read() print result [exe_fork.py] #!/usr/bin/env python import os import time pid = os.fork() if pid != 0: print "parent\n" else: time.sleep(5) print "child\n" [動作] 各スクリプトの動作としては、 test.pyがexe_fork.pyをPopen(stdoutはPIPEで受信)で実行し、 read()メソッドでexe_fork.pyの標準出力を受け取り、表示する。 exe_fork.pyはforkして、   親プロセスは"parent"と出力   子プロセスは5秒後に"child"と出力 です。 [実行結果] test.pyを実行すると 5秒後に   parent   child と表示されました。 これを実行する前は実行後すぐに "parent" と表示されてスクリプト終了するのだと予想しておりました。 しかし実際はexe_fork.pyの親と子の両方のプロセス終了するまで何も表示されず 両プロセスが終了した後にtest.pyのread()メソッドが完了するようです。 (どういうしくみでそうなっているのかよくわかりません。。) [質問・相談] test.pyでexe_fork.pyの親プロセスの標準出力だけを反映する方法ございませんでしょうか? なお、都合上、以下の条件を満たしている必要がございます。  条件1: test.py側のソースは変更しない  条件2: exe_fork.pyの親プロセスが終了した時点でtest.pyのread()メソッドが終了する  条件3: forkptyは使わない [参考]  exe_fork.py側で子プロセスのみsys.stdout.close()してみましたが結局exe_fork.pyの子プロセスが終了するまで(=5秒経過するまで)test.pyのread()メソッドは完了しませんでした。   よろしくお願いします。

  • PythonによるCGIの開発環境の構築

    Pythonを使ってCGIを開発するために、とりあえず下記の環境を整えました。 Python 2.7 Eclipse 3.7.0 また、そのプラグインとして、AptanaStudio、Pydev 「Pydevで書いたスクリプトを、Aptana内蔵のWEBサーバー上で走らせて、ブラウザ上で動作を確認」、というのがやりたいことなんですけど、今は、Pythonの出力がコンソールに表示されたり、ブラウザで見るとソースが表示されるだけだったり、という頭の悪い状態に陥っています。 何をどう設定したらいいのか教えて下さい。 「そんなもんできねーよ!」という場合は、上記の環境をなるべく崩さずに、「Pythonで書かれたCGIの動作をブラウザ上で確認する方法」を教えて下さい。 「それも無理!」という場合は、「あなたのCGI(Python)開発環境」を教えて下さい。 初心者丸出しな質問で申し訳ありませんが、よろしくお願いします。

    • 締切済み
    • CGI
  • CGIが使えないのはなぜ?

    こんにちは。 現在Redhat8を使用して、サーバーを作っています。apacheを起動してサイトが表示できるまではOKだったのですが、CGIを使う段階でつまづいています。 httpd.confは様々なサイトを見てそのとおりに編集したのですが、いざCGIを起動するとServerError!となります。Error_logを見ると↓のような妙な文章でした。Permissionなら分かるのですが、、これは何でしょう。 Premature end of script headers: XXX.cgi CGIの先頭のPerl指定は #!/usr/bin/perl にしてあります。何が悪いのか分からず途方にくれています。何かチェックする部分があればどうかご指摘ください。お願いします。パーミッションの設定は完了しており、CGIスクリプト自体も先頭以外はいじっていません。 RedHat8.0 Apache2.0 /home/www/html にHTMLファイル /home/www/cgi-bin にCGIスクリプト ----------------以下関係のありそうなhttpd.confの抜粋 ScriptAlias /cgi-bin/ "/home/www/cgi-bin/" <Directory /home/www/cgi-bin> Options ExecCGI Order allow,deny Allow from all </Directory> AddHandler cgi-script .cgi