Tag: python

PythonMemo

  • 2021-09-12 http://dbweb.0258.net/ の内容を引っ越しました。
  • 内容は2013年頃のものだったと思います。

 Pythonは予約語が少なくシンプルな言語と言われています。その為ほぼ同じ文法の言語が各種グラフィックソフトやデータ解析ソフトのスクリプトとして採用されています。最近、利用が増えているプログラム言語の一つです。
 字下げによりブロックを管理しますので、自然とプログラムが見やすく綺麗に記述できるらしい。

 基本だけちょっと学習しておきたい。

 ※ pythonのバージョンは2系です。3は動かないと思います。

  • このページでは、ごく簡単なプログラムのテストなどをまとめていく予定です。

参考リンク

簡単な練習

  • 環境はUbuntu 12.04

シェルなどのコマンドを実行し結果を使う

# coding: utf-8
 
import commands
 
lskekka = commands.getoutput("ls -la")
 
print lskekka+"\n\n"
 
bunkatu = lskekka.split("\n")
 
cnt = 1
for st in bunkatu:
        print cnt, st
        cnt = cnt + 1

結果:

合計 36
drwxrwxr-x   3 isao isao  4096  4月  9 14:10 .
drwxr-xr-x 132 isao isao 12288  4月  9 14:10 ..
drwxrwxr-x   8 isao isao  4096  4月  9 13:49 .git
-rw-rw-r--   1 isao isao   217  4月  9 14:10 commmand_shell.py
-rw-rw-r--   1 isao isao   163  4月  8 19:45 func.php
-rw-rw-r--   1 isao isao   141  4月  8 19:47 index.html
-rw-rw-r--   1 isao isao    16  4月  8 19:45 sub.html
 
 
1 合計 36
2 drwxrwxr-x   3 isao isao  4096  4月  9 14:10 .
3 drwxr-xr-x 132 isao isao 12288  4月  9 14:10 ..
4 drwxrwxr-x   8 isao isao  4096  4月  9 13:49 .git
5 -rw-rw-r--   1 isao isao   217  4月  9 14:10 commmand_shell.py
6 -rw-rw-r--   1 isao isao   163  4月  8 19:45 func.php
7 -rw-rw-r--   1 isao isao   141  4月  8 19:47 index.html
8 -rw-rw-r--   1 isao isao    16  4月  8 19:45 sub.html


コマンドライン引数の取得

  • 2015-05-07

 モジュールsysを読み込むと、sys.argv が コマンドラインパラーメタを格納した配列を返す。

  • syspara.py として以下の様なテストスクリプトを作成
    #!/usr/bin/python
    # coding: UTF-8
     
    import sys
     
    print "コマンドラインのパラメータ" 
     
    argvs = sys.argv
    argnum = len(argvs)
     
    print argvs
    print argnum

syspara.py はパーミッション700などにしておきます。

上記の実行結果

$ ./syspara.py hogehoge ほげほげ
コマンドラインのパラメータ
['./syspara.py', 'hogehoge', '\xe3\x81\xbb\xe3\x81\x92\xe3\x81\xbb\xe3\x81\x92']
3


上記をちょっと変えて、

#!/usr/bin/python
# coding: UTF-8
# coding:Shift_JIS
 
import sys
 
print sys.stdin.encoding
print sys.stdout.encoding
print sys.stderr.encoding
 
print u"コマンドラインのパラメータ" 
 
argvs = sys.argv
argnum = len(argvs)
 
print argvs
print argnum
 
print "---------------------"
 
for x in argvs:
	print x

結果:

UTF-8
UTF-8
UTF-8
コマンドラインのパラメータ
['syspara.py']
1
---------------------
syspara.py

※python3だと以下の様なエラーになった。

  File "syspara.py", line 7
    print sys.stdin.encoding
            ^
SyntaxError: invalid syntax

python3の場合は、次の様に修正するとエラーは解消されます。(Ubuntu20.04にて確認) - 2022-03-01

#!/usr/bin/python3
# coding: UTF-8
 
import sys
  
print ("コマンドラインのパラメータ")
   
argvs = sys.argv
argnum = len(argvs)
    
print (argvs)
print (argnum)


ファイルを読み込む

  • 2015-05-07
  • スクリプトファイル: fileread.py
    # coding: utf-8
     
    fname = "fileread.py"
    f = open(fname)
    line = f.readline()
    while line:
        print line
        line = f.readline()
    f.close


  • 実行結果
    $ python fileread.py 
    # coding: utf-8
     
     
     
    fname = "fileread.py"
     
    f = open(fname)
     
    line = f.readline()
     
    while line:
     
        print line
     
        line = f.readline()
     
    f.close
    


上記だと改行が余計に入ってしまう。

# coding: utf-8
 
fname = "fileread.py"
f = open(fname)
line = f.readline()
while line:
        line = line.rstrip("\n\r")
        print line
        line = f.readline()
f.close

だと読み込んだファイルの改行がカットされるが、データが変わってしまう事になる。改行の無い出力にするには、次の様にsys.stdout.writeを使うのが良いみたい。

# coding: utf-8
 
import sys
 
fname = "fileread.py"
f = open(fname)
line = f.readline()
while line:
        sys.stdout.write(line)
        line = f.readline()
f.close

python3の場合

python3でシェルスクリプトで動くようなテストスクリプトにするなら、次のような修正でエラーが解消される。(2022-03-01 Ubuntu20.04で確認)

#!/usr/bin/python3
 
fname = "fileread3.py"
f = open(fname)
line = f.readline()
while line:
    line = line.rstrip("\n\r")
    print(line)
    line = f.readline()
f.close


参考になりそうなWEBサイト




CGI

 PerlがCGIとして動作可能なWEBサーバーで、pythonがインストールされていると拡張子をcgiとすれば、Perl同様にCGIとしてpythonも動作するようです。

Perlで「Hello world!」と表示させる

#!/usr/bin/perl
 
print "Content-type: text/html\n\n";
print "Hello, World.";

と同様の簡単なスクリプトは、tython3だと次にようになります。printは改行しますので、「\n」は一つ少なくしています。

#!/usr/bin/python3

print ("Content-type: text/html\n")
print ("Hello, World.")


参考

Python3をCGIのプログラム言語として利用する方法はネットの以下のURLなどが参考になります。

例えば、Ubuntu20.04などでは、
1.CGIを実行するには、モジュール「cgid」を有効にする。
2.ディレクトリに「ExecCGI」のオプションを有効にする。
3.cgiやpyなどの拡張子をCGIのファイルとして「AddHandler cgi-script」で指定する。
4.Webサーバー(apache2)を再起動して設定を有効にする
といった手順、設定を行います。

Apache2 : CGI スクリプトを利用する Ubuntu 22.04
https://www.server-world.info/query?os=Ubuntu_22.04&p=httpd&f=5

Apache2 : CGI スクリプトを利用する Ubuntu 20.04
https://www.server-world.info/query?os=Ubuntu_20.04&p=httpd&f=5

Python3でCGIを実行。失敗しやすいポイントも紹介。
https://shimi-dai.com/python-cgi-for-biginner/