python - 在python中更改用户

标签 python linux hadoop os.system

我正在编写一个简单的脚本来重启 hadoop 从站。在脚本中,我必须以 root 用户身份进行一些初始更改。之后,我必须更改为用户“hadoop”并执行一组命令。我正在使用 os.system 来运行命令,但我怀疑它是否运行良好。例如:

uid=pwd.getpwnam('hadoop')[2]
os.setuid(uid)
os.system('whoami')
os.chdir('/home/hadoop/hadoop/')
os.system('bin/hadoop-daemon.sh stop tasktracker')

在此之后我必须再次以 root 身份执行一些命令并再次成为用户“hadoop”并执行:

os.system('bin/hadoop-daemon.sh stop tasktracker')

我这里有三个问题,

  1. os.system 是我可以用来发出 linux 命令的最佳命令吗?

  2. 我可以通过上面的命令从 root 用户更改为用户 hadoop 但我无法更改为 root 用户(我可以理解如果他们允许这样做会有安全问题,我想知道的是有没有可能做到这一点,至少通过密码)?

  3. os.setuid() 有效吗? whoami 打印用户 hadoop 但进程“tasktracker”不会使用这些命令停止,但如果我手动执行相同的命令它工作正常(我在手动尝试时使用“su hadoop”而不是 setuid)。

感谢您的帮助。

  • 塞图

最佳答案

你可以使用:

os.system('sudo -u hadoop bin/hadoop-daemon.sh stop tasktracker')

或者如果你没有 sudo 但有 su

os.system('su hadoop -c "bin/hadoop-daemon.sh stop tasktracker"')

关于python - 在python中更改用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8025294/

相关文章:

python - Django 如何从 TemplateView 找到正确的 Template 变量

java - 如何从 Linux 命令行使用 Weka 的 10 折交叉验证运行 LibSVM 分类器?

hadoop - 在 hadoop 流中使用 fopen

linux - 我可以使用从 unzip -p cmd 传输的数据来使用 SCP 吗?

hadoop - Oracle 一致性和 Hadoop HDFS 之间有什么区别

java - 当我创建一个hadoop conf对象时,代码是否在Hadoop环境中执行,即使它是一个独立的Java代码?

python - 如何判断 IPython 是否正在运行?

python - Dicom 变形图像配准

python - 使用 smtpd.DebuggingServer 作为 STMP 服务器从 python 发送电子邮件

Linux 上的 MySQL 从 5.0 升级到 5.6