[英]changing password using pexpect and passwd non-interactivly?
我正在嘗試學習python以非交互方式更改用戶密碼,但是似乎沒有任何效果。
python的pexepect
模塊似乎很有前途,所以我只是嘗試使用它。
本教程很好,但是不起作用。
互聯網上有很多與此相關的代碼,但似乎沒有一個起作用。
我的代碼也沒有:
#!/usr/bin/python
import pexpect
import time
def ChangePassword(user, pass):
passwd = pexpect.spawn("/usr/bin/passwd %s" % user)
for x in xrange(2):
# wait for password: to come out of passwd's stdout
passwd.expect("password: ")
# send pass to passwd's stdin
passwd.sendline(pass)
time.sleep(0.1)
ChangePassword('rajesh', 'bar') # changes user "foo"'s password to "bar"
錯誤:
bash-3.00# ./solpas7.py
File "./solpas7.py", line 4
def ChangePassword(user, pass):
^
SyntaxError: invalid syntax
編輯:我將通行證更改為pa,但不是很多,密碼也沒有更改。
bash-3.00# ./solpas7.py
Traceback (most recent call last):
File "./solpas7.py", line 14, in ?
ChangePassword('rajesh', 'bar') # changes user "foo"'s password to "bar"
File "./solpas7.py", line 9, in ChangePassword
passwd.expect("password: ")
File "/usr/lib/python2.4/site-packages/pexpect.py", line 1311, in expect
return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
File "/usr/lib/python2.4/site-packages/pexpect.py", line 1325, in expect_list
return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize )
File "/usr/lib/python2.4/site-packages/pexpect.py", line 1409, in expect_loop
raise TIMEOUT (str(e) + '\n' + str(self))
pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
<pexpect.spawn object at 0x80e306c>
version: 2.3 ($Revision: 399 $)
command: /usr/bin/passwd
args: ['/usr/bin/passwd', 'rajesh']
searcher: searcher_re:
0: re.compile("password: ")
buffer (last 100 chars): New Password:
before (last 100 chars): New Password:
after: pexpect.TIMEOUT
match: None
match_index: None
exitstatus: None
flag_eof: False
pid: 4683
child_fd: 3
closed: False
timeout: 30
delimiter: pexpect.EOF
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
您不能將pass
用作變量名。 這是一個保留關鍵字。
編輯:pexpect正在等待字符串"password: "
但是正如您可以從錯誤消息中看出的那樣, passwd
輸出"New Password: "
(注意大寫字母p)。
buffer (last 100 chars): New Password:
before (last 100 chars): New Password:
代替passwd.expect("password: ")
您需要使用passwd.expect("Password: ")
。
您還可以使用此選項使搜索不區分大小寫:
passwd.expect('(?i)password:')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.