我的脚本需要以let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
执行,对于某些任务root
,我还需要获取someuser
someuser
路径,这就是问题所在。
对于那份工作(找到用户家),我使用$HOME
。
如上所述,脚本需要使用os.path.expanduser
更改其用户并运行代码以使用户回家:
su
主脚本使用from os.path import expanduser
def user_home():
home = expanduser("~")
return home
print user_home()
调用 test_home.py :
su
非常好。但是对于AIX和Solaris,脚本没有# su someuser -c /tmp/test_home.py
/home/someuser
someuser
,而是获得$HOME
root
。
AIX :以root身份执行
$HOME
的Solaris : 以root身份执行
su someuser -c /tmp/test_home.py
/
我已经在几个发行版上测试了这段代码:
它只在AIX和Solaris上出现问题。有谁知道为什么?
使用登录时su someuser -c /tmp/test_home.py
shell-init: error retrieving current directory: getcwd: cannot access parent directories: Permission denied
/root
或-
有效,但我无法在我的脚本上使用-l
。有关如何克服这个问题的任何想法吗?
我试图不使用像上面这样的shell方法,但我没有选择
su -
答案 0 :(得分:0)
我遇到同样的问题,在使用sudo或su之后,它给了root主目录,我用下面的方法修复:
akjha-mn2:~ akjha$ python test1
/Users/akjha
akjha-mn2:~ akjha$ sudo python test1
Password:
/Users/akjha
akjha-mn2:~ akjha$ cat test1
#!/bin/env python
import os
user1=os.getlogin()
home=os.path.expanduser("~{0}".format(user1))
print home
akjha-mn2:~ akjha$
答案 1 :(得分:0)
import socket
import os
import time
import sys
import pwd
###############################################################################
# Set uid and gid
###############################################################################
def set_uid_gid( uid, gid ):
os.setgid(gid)
os.setuid(uid)
###############################################################################
# Set effective uid and gid
###############################################################################
def set_effective_uid_gid( uid, gid ):
os.setegid(gid)
os.seteuid(uid)
###############################################################################
# Get uid and gid
###############################################################################
def get_uid_gid():
uid = os.getuid()
gid = os.getgid()
return( uid, gid )
###############################################################################
def get_euid_egid():
uid = os.geteuid()
gid = os.getegid()
return( uid, gid )
###############################################################################
def get_uid_gid_for_user( username):
pwd_obj = pwd.getpwnam(username)
uid = pwd_obj.pw_uid
gid = pwd_obj.pw_gid
return( uid, gid)
#Switch to <SOMEUSER>
def switch_user():
(original_uid , original_gid) = get_uid_gid()
(analyst_uid , analyst_gid) = get_uid_gid_for_user("<SOMEUSER>")
set_effective_uid_gid(analyst_uid ,analyst_gid)
os.system('python run_this_script,py')
#Switch back to root/original
set_uid_gid(original_uid , original_gid)