我想在Python中使用超级用户权限执行一些Linux命令。
最初我想从用户输入密码,然后将密码存储在变量中,以备将来使用超级用户权限执行Linux命令时使用。
在示例代码之下,我打算做什么:
import os, sys, getpass**
# To input password from user then use this password while execution of Linux commands using superuser privileges.
password = getpass.getpass()
# Before executing below line it'll prompt to enter the password and here i want to use password variable.
os.system("sudo -s")
# [sudo] password for <username>: # <Password>
成功执行上述命令后,我想以超级用户权限执行其余代码。
注意:我想在执行os.system("sudo -s")
命令时使用标准方法(即stdin,stdout,stderr,pipe等)来输入密码。我知道还有其他方法可以解决这个问题。
例如:
import os
password = "my-password"
command = "echo {0} | sudo -s {1}".format(password, "my-command")
os.system(command)
请帮助我,如果我的意图错误,我该怎么办或纠正我。
答案 0 :(得分:0)
你可以用pexpect:
来做Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pexpect
>>> terminal = pexpect.spawn('/bin/sh')
启动shell
>>> terminal.sendline('sudo aptitude help')
19
发送命令
>>> terminal.expect('andy:')
0
期望[sudo] password for <user>:
或仅<user>:
出现在输出中(终端会等待它)
>>> import getpass
>>> password = getpass.getpass()
Password:
获取密码
>>> terminal.sendline(password)
16
将密码发送到终端
>>> result = ''
>>> while True:
... try:
... result += terminal.read_nonblocking(1, 1)
... except pexpect.TIMEOUT:
... break
...
获得结果
>>> result
'\r\naptitude 0.7.4\r\n\xd0\x98\xd1\x81\xd0\xbf\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5: aptitude [-S \xd0\xb8\xd0\xbc\xd1\x8f \xd1\x84\xd0\xb0\xd0\xb9\xd0\xbb\xd0\xb0] [-u|-i]\r\n aptitude [\xd0\xbf\xd0\xb0\xd1\x80\xd0\xb0\xd0\xbc\xd0\xb5\xd1\x82\xd1\x80\xd1\x8b] <\xd0\xb4\xd0\xb5\xd0\xb9\xd1\x81\xd1\x82\xd0\xb2\xd0\xb8\xd0\xb5> \xe2\x80\xa6\r\n \xd0\x94\xd0\xb5\xd0\xb9\xd1\x81\xd1\x82\xd0\xb2\xd0\xb8\xd1\x8f (\xd0\xb5\xd1\x81\xd0\xbb\xd0\xb8 \xd0\xbd\xd0\xb5 \xd0\xb7\...'
(这是俄语)
Pexpect docs here