<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE feed [
      <!ENTITY lt "&#38;#60;">
      <!ENTITY gt "&#62;">
      <!ENTITY amp "&#38;#38;">
      <!ENTITY apos "&#39;">
      <!ENTITY quot "&#34;">
      <!ENTITY nbsp "&#160;">
      <!ENTITY copy "&#169;">
]>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title type="text">開発ブログ</title>
    <subtitle type="text">MASA Lab softlab-Software Architecture Laboratory</subtitle>
    <updated>2026-05-21T13:41:17+09:00</updated>
    <id>http://softlab.masa-lab.net/modules/d3blog/index.php</id>
    <link rel="alternate" type="text/xhtml" hreflang="ja" href="http://softlab.masa-lab.net/" />
    <link rel="self" type="application/atom+xml" href="http://softlab.masa-lab.net/modules/d3blog/index.php?page=atom" />
    <rights>Copyright &copy; 2008-2019 by MASA-Lab</rights>
    <generator uri="http://softlab.masa-lab.net/">D3BLOG - XOOPS BLOG MODULE</generator>
    <entry>
        <title>python cgi troubleshoot</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=234" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=234</id>
        <published>2017-10-28T22:00:00+09:00</published>
        <updated>2018-02-16T15:08:21+09:00</updated>
        <category term="Python" label="Python" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">python cgi でのトラブルシューティング環境変数の状態などを確認したい場合に以下を env.cgi として保存し .htaccess でアクセスさせる</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div>python cgi でのトラブルシューティング<br />環境変数の状態などを確認したい場合に<br />以下を env.cgi として保存し .htaccess でアクセスさせる<br /><pre class="blogCode"><code>
#!/usr/local/bin/python
# -*- coding: utf-8 mode: python -*-

import os

def to_table(dic):
    keys = [key for key in dic]
    keys.sort()
    code = &quot;&lt;table style=&#039;border:solid&#039;&gt;&quot;
    for key in keys:
        code += &quot;&lt;tr&gt;&lt;th&gt;%s&lt;/th&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;&quot; % (key, dic[key])
        pass
    code += &quot;&lt;/table&gt;&quot;
    return code

def application(environ, start_response):
    status = &quot;200 OK&quot;
    headers = [(&#039;Content-Type&#039;, &quot;text/html;charset=UTF-8&quot;)]
    code = &quot;&lt;html&gt;&lt;body&gt;&quot;
    code += &quot;&lt;h3&gt;environ&lt;/h3&gt;&quot;
    code += to_table(environ)
    code += &quot;&lt;h3&gt;os.environ&lt;/h3&gt;&quot;
    code += to_table(os.environ)
    code += &quot;&lt;/body&gt;&lt;/html&gt;&quot;
    start_response(status, headers)
    return [code]

if __name__ == &quot;__main__&quot;:
    from wsgiref.handlers import CGIHandler
    CGIHandler().run(application)
    pass
</code></pre></div>]]>
       </content>
    </entry>
    <entry>
        <title>python 開発環境</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=232" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=232</id>
        <published>2017-10-28T21:20:00+09:00</published>
        <updated>2018-02-16T15:06:17+09:00</updated>
        <category term="Python" label="Python" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">python で開発を行う場合に、virtualenv を使うと固有なパッケージなどを設定した仮想環境を作ることができる</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div>python で開発を行う場合に、virtualenv を使うと<br />固有なパッケージなどを設定した仮想環境を作ることができる<br />■まずはインストール<br /><pre class="blogCode"><code>
% sudo easy_install virtualenv
</code></pre><br /><br />■使い方 (環境作成)<br /><br /><pre class="blogCode"><code>
% mkdir test
% cd test
% virtualenv --no-site-packages .
</code></pre><br /><br />これで bin/, local/, include/, lib/ などがカレントに作成される<br /><br />■使い方 (使う)<br /><pre class="blogCode"><code>
% source bin/activate
</code></pre><br /><br />で virtualenv に入る<br /><br />好きなものをインストールなど<br /><pre class="blogCode"><code>
(test) % pip install django
</code></pre><br /><br />virtualenv から出る<br /><pre class="blogCode"><code>
(test) % deactivte
</code></pre><br /><br /><br /><a href="http://qiita.com/H-A-L/items/5d5a2ef73be8d140bdf3" rel="external">http://qiita.com/H-A-L/items/5d5a2ef73be8d140bdf3</a></div>]]>
       </content>
    </entry>
    <entry>
        <title>coreserver (xrea) でpython</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=231" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=231</id>
        <published>2017-10-27T22:10:00+09:00</published>
        <updated>2018-02-16T15:06:29+09:00</updated>
        <category term="Python" label="Python" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">.htaccess に以下を追加AddHandler cgi-script .py.py は cgiスクリプトとして実行#! には 制限なし？#!/virtual/username/bin/python などもOKヘッダを出力しないと 500 エラーになるたとえば以下のようなもの...</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div>.htaccess に以下を追加<br />AddHandler cgi-script .py<br /><br />.py は cgiスクリプトとして実行<br />#! には 制限なし？<br />#!/virtual/username/bin/python <br />などもOK<br /><br />ヘッダを出力しないと 500 エラーになる<br />たとえば以下のようなものを出力しておく<br />print 'Content-type: text/html; charset=UTF-8\n'<br /><br />RewriteBase は public_html 以下を書く<br />public_html/test1 なら<br /><br />RewriteBase /test1/<br /><br /><br />ちなみに coreserver では .htaccess に<br />Options<br />を書くとInternal Server Errorになる？</div>]]>
       </content>
    </entry>
    <entry>
        <title>pythonのデコレータ</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=244" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=244</id>
        <published>2017-01-06T22:10:00+09:00</published>
        <updated>2018-02-16T15:11:06+09:00</updated>
        <category term="Python" label="Python" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">いつも書き方忘れるので、ポイントをデコレータはシンタックスシュガーであるデコレータ構文で書いた場合
@decorator
def func():
デコレータ構文を使わないと
func = decorator(func)
</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div>いつも書き方忘れるので、ポイントを<br /><br />デコレータはシンタックスシュガーである<br /><br />デコレータ構文で書いた場合<br /><pre class="blogCode"><code>
@decorator
def func():
</code></pre><br />デコレータ構文を使わないと<br /><pre class="blogCode"><code>
func = decorator(func)
</code></pre><br />つまり decorator には func が渡されるので基本は<br /><pre class="blogCode"><code>
def decorator(func):
  def _wrap(*args, **kw):
    # do something
    func(*args, **kw)
  return _wrap
</code></pre><br />この時 _wrap(...) が実際の func になることがポイント<br /><br />たとえば、本来パラメタとして数値が文字列で渡される関数なのだが、数値としてパラメタが渡るようにするデコレータは、以下のような形で処理できる<br /><pre class="blogCode"><code>
def int_param(func):
  def _wrap(s):
    v = int(s)
    func(v)
  return _wrap

@int_param
add1(v):
  return v+1
</code></pre><br /><br /><br />■要するに<br />単純に言えば、処理したい関数を書く<br /><pre class="blogCode"><code>
def _wrap(arg1, arg2):
  # do something
  return func(func_arg1, func_arg2, ...)
</code></pre><br />それをデコレータの名前を付けた func を引数とした関数でくるむ<br /><pre class="blogCode"><code>
def decorator(func):
  def _wrap(...)
    ...
  return _wrap
</code></pre><br />という感じ<br /><br /><br />■デコレータへの引数<br />デコレータに引数を付けたい場合、基本の部分にさらに引数を受け取る部分でくるむ感じになる。<br /><pre class="blogCode"><code>
@decorator(&#039;deco_arg&#039;)
def func():
</code></pre><br />展開すると<br /><pre class="blogCode"><code>
func = decorator(&#039;deco_arg&#039;)(func)
</code></pre><br />となる<br />そのため、引数を受け取る部分でくるんであげればOK<br /><pre class="blogCode"><code>
def decorator(deco_arg):
  def _decorator(func):
    def _wrap(*args, **kw):
      # do something
      return func(*args, **kw)
    return _wrap
  return _decorator
</code></pre><br /><br /><br />TIPS1<br />デコレータは多重に設定することができる<br /><pre class="blogCode"><code>
@deco1
@deco2
def func1():
</code></pre><br /><br />この場合も、順番に考えれば大丈夫<br />func1 = deco1(deco2(func1))<br /><br /><pre class="blogCode"><code>
def deco1(func):
  def _wrap(*args, **kw)
    print &quot;deco1&quot;
    return func(*args, **kw)
  return _wrap
def deco2(func):
  def _wrap(*args, **kw)
    print &quot;deco2&quot;
    return func(*args, **kw)
  return _wrap
</code></pre></div>]]>
       </content>
    </entry>
</feed>