・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
)
となる。