質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

3回答

3638閲覧

pythonで、コマンドラインからの実行か、CGIからの呼び出しで実行かを判別する

tamo_solo

総合スコア26

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2017/03/10 02:47

###前提・実現したいこと
python2.7を使用しています。

入力内容から結果表示を行うプログラムがあり、OSのコマンドラインで実行する前提で、print文を使用して結果を表示させていました。
同プログラムをCGIからの呼び出しでブラウザ上に結果表示させる必要があり、そのまま呼び出したのですが(当然ですが)ブラウザ上の結果表示で改行が行われません。

(1)呼び出し元が、コマンドラインであるか、CGIからであるかを判別できれば</br>を付加するなどの対応でいけそうな気がします。判別できる方法はありますでしょうか?

(2)(1)のように判別をすることもなく、対応可能な方法がありますでしょうか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

CGI であるならば、いくつかの環境変数が(Webサーバによって)設定されて呼び出されます。
通常起動時にそれらの環境変数が設定されていないのであれば、環境変数のあるなしで切り分けられると思います。

環境変数名内容
AUTH_TYPE認証方式
CONTENT_LENGTHデータのバイト数
CONTENT_TYPEデータタイプ
GATEWAY_INTERFACEゲートウェイプロトコル名称(CGI/1.1等)
HTTP_ACCEPTContent-Type のリスト
HTTP_REFERERCGIを呼び出した元ページのURL
HTTP_USER_AGENTブラウザのUserAgent 情報
PATH_INFOURLのサーバ上でのパス
PATH_TRANSLATEDPATH_INFO を絶対パスとしたもの
QUERY_STRINGリクエストのデータ部分(URL の?以後)
REMOTE_ADDRクライアントIPアドレス
REMOTE_HOSTクライアントホスト名
REMOTE_IDENTクライアント側ユーザID
REMOTE_USERクライアント側ユーザ名
REQUEST_METHODGET/POST/HEAD などの、リクエストメソッド種別
SCRIPT_NAMECGIスクリプト名
SERVER_NAMEサーバー名
SERVER_PORTサーバで受け付けたポート番号
SERVER_PROTOCOL使用しているプロトコル(HTTP/1.0 等)
SERVER_SOFTWAREWebサーバのソフトウェア名(apache等)

投稿2017/03/10 03:24

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

(1)呼び出し元が、コマンドラインであるか、CGIからであるかを判別できれば

環境変数を見ると判断できます。

(2)(1)のように判別をすることもなく、対応可能な方法がありますでしょうか?

CGIの応答のMIMEタイプを、text/plain にする。

投稿2017/03/10 03:10

otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamo_solo

2017/03/10 03:24

ありがとうございます。MIMEタイプ変更でも対応可能なのですね (すみません、先にお答えいただいた方をベストアンサーとしました)
guest

0

ベストアンサー

コマンドライン引数で動作を制御するのが自然だと思います。
たとえばpython hoge.py cgiと実行した場合のみ、CGI動作させます。

Python

1import sys 2if __name__ == '__main__': 3 isCgi = False 4 if len(sys.argv) > 1 and sys.argv[1] == "cgi": 5 isCgi = True 6 7 print(isCgi) 8

投稿2017/03/10 02:58

can110

総合スコア38262

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamo_solo

2017/03/10 03:23

ありがとうございます。解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問