・Perlの場合は → 『 (Perl) webとコマンドライン双方で通用するユーザのホームディレクトリを得る方法 』
Pythonでユーザのホームディレクトリ (例:/home/user )を得る方法は…
シェル内でPythonスクリプトが実行される場合は、次の方法のように環境変数を次のように読み取ればよい。
os.environ['HOME']または
os.getenv('HOME')
だが、これはWeb上から呼ばれるスクリプトの場合は環境変数を読み取る方法は通用しない。コマンドライン、Web上双方で通用する方法は
pwd.getpwuid(os.getuid())[5]または
os.path.expanduser("~")
となる。でもって、ホームディレクトリを取得するサブルーチンを次のように書いてみる
# -*- coding: utf-8 -*- import os import pwd def func_get_homedir(): if 'HOME' in os.environ: return os.environ['HOME']; else: return pwd.getpwuid(os.getuid())[5]; print "func_get_homedirで得られる値 = " + func_get_homedir()
なお、スクリプト先頭でユーザディレクトリ下にインストールされたライブラリを読み込まなければならないとき、次のようにして検索パスを追加することになる。
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys sys.path.append(os.path.expanduser("~") + '/lib/python') import ....
pwd.getpwuid(os.getuid())
で得られる値の一覧を試しに出してみると
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import pwd # ユーザーディレクトリ (Webスクリプト上で使用可) print "pwd.getpwuid(os.getuid())[5] = " + pwd.getpwuid(os.getuid())[5] print "os.path.expanduser(\"~\") = " + os.path.expanduser("~") # 全てのリスト項目を列挙してみる print "list all pwd.getpwuid ..." for i in range(0, len(pwd.getpwuid(os.getuid()))): print " pwd.getpwuid(os.getuid())[%d] = %s" % (i, pwd.getpwuid(os.getuid())[i]) # ユーザーディレクトリ (シェル実行の時のみ) print "os.environ['HOME'] = " + os.environ['HOME'] print "os.getenv('HOME') = " + os.getenv('HOME')
実行結果は
pwd.getpwuid(os.getuid())[5] = /home/user os.path.expanduser("~") = /home/user list all pwd.getpwuid ... pwd.getpwuid(os.getuid())[0] = user pwd.getpwuid(os.getuid())[1] = x pwd.getpwuid(os.getuid())[2] = 1001 pwd.getpwuid(os.getuid())[3] = 1001 pwd.getpwuid(os.getuid())[4] = user,,, pwd.getpwuid(os.getuid())[5] = /home/user pwd.getpwuid(os.getuid())[6] = /bin/bash os.environ['HOME'] = /home/user os.getenv('HOME') = /home/user
PHPでユーザのホームディレクトリ (例:/home/user )を得る方法は…
シェル内でPHPスクリプトを実行する場合、次の方法で環境変数を読み取ってもよい。
getenv('HOME');
Webでもシェル内でも使える方法は
$info=posix_getpwuid(posix_geteuid()); print $info['dir'];
となる。$info
に入っている値を列挙してみると…
<?php $info=posix_getpwuid(posix_geteuid()); // get user HOME dir print_r($info);
実行結果は
Array ( [name] => user [passwd] => x [uid] => 1001 [gid] => 1001 [gecos] => user,,, [dir] => /home/user [shell] => /bin/bash )
となる。