python 如何实现自动输入密码

deifei 2013-01-22 07:14:11
在用python执行一个命令(关闭虚拟IP),该命令需要root权限,因此使用sudo来执行,主要命令如下所示:
cmd = 'sudo ifconfig bond0:0 down'
p = sp.Popen(cmd, stdin = sp.PIPE, stdout = sp.PIPE, stderr = sp.PIPE, shell=True)
p.communicate('password')
p.wait()
本是希望使用communicate来输入密码,
但是在运行时还是会提示:
Password:
并一直等待用户输入;
哪位达人知道如何解决啊!!!!
...全文
3109 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
deifei 2013-01-23
  • 打赏
  • 举报
回复
先结帖,参与的都散点,如果后续有回答正确的才加分吧
deifei 2013-01-23
  • 打赏
  • 举报
回复
引用 12 楼 xxjnetwork 的回复:
引用 8 楼 deifei 的回复:引用 7 楼 xxjnetwork 的回复:还有一种做法,楼主会expect语言不,这个可以做到呢,非常好,类似shell脚本,可以python调用; 恩,这个是可以,刚用shell实现了一次,已经达到目的。 只是想知道为什么用subprocess时捕获了stdout、stderr,还是会有输出? self.proc = ……
谢谢,不过这个同样不好使,系统输出还是没有捕获到,估计还是看看官方手册了。
xxjnetwork 2013-01-23
  • 打赏
  • 举报
回复
引用 8 楼 deifei 的回复:
引用 7 楼 xxjnetwork 的回复:还有一种做法,楼主会expect语言不,这个可以做到呢,非常好,类似shell脚本,可以python调用; 恩,这个是可以,刚用shell实现了一次,已经达到目的。 只是想知道为什么用subprocess时捕获了stdout、stderr,还是会有输出?
self.proc = subprocess.Popen(cmd.cmdStr, env=None, shell=True, executable='/bin/bash', stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, preexec_fn=preexec_fn, close_fds=True) (stdout_value, stderr_value) = self.proc.communicate(input=self.stdin) 这是我好久之前的做法,楼主可以看看有帮助不,另外楼主还是多看看python的官方手册关于这个模块的介绍,肯定会有答案的。
ImN1 2013-01-22
  • 打赏
  • 举报
回复
只有windows,纯靠猜……
deifei 2013-01-22
  • 打赏
  • 举报
回复
引用 9 楼 snmr_com 的回复:
communicate 和 wait 换个位置
换了位置是不行的,哥,你试过行?
ImN1 2013-01-22
  • 打赏
  • 举报
回复
communicate 和 wait 换个位置
deifei 2013-01-22
  • 打赏
  • 举报
回复
引用 7 楼 xxjnetwork 的回复:
还有一种做法,楼主会expect语言不,这个可以做到呢,非常好,类似shell脚本,可以python调用;
恩,这个是可以,刚用shell实现了一次,已经达到目的。 只是想知道为什么用subprocess时捕获了stdout、stderr,还是会有输出?
xxjnetwork 2013-01-22
  • 打赏
  • 举报
回复
还有一种做法,楼主会expect语言不,这个可以做到呢,非常好,类似shell脚本,可以python调用;
deifei 2013-01-22
  • 打赏
  • 举报
回复
引用 5 楼 snmr_com 的回复:
shell=False
这样会报错的: File "/usr/lib64/python2.4/subprocess.py", line 993, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 这是为什么?找不到文件child_exception
ImN1 2013-01-22
  • 打赏
  • 举报
回复
shell=False
deifei 2013-01-22
  • 打赏
  • 举报
回复
引用 2 楼 bugs2k 的回复:
试试调用input后write到PIPE中,没试过
运行后输出Password是在调用p.communicate('password')之前。 很奇怪这个是什么输出流,捕获了stdout和stderr后还是输出来了。 有人知道为什么么?
ImN1 2013-01-22
  • 打赏
  • 举报
回复
试一下 b'password'
bugs2k 2013-01-22
  • 打赏
  • 举报
回复
试试调用input后write到PIPE中,没试过
deifei 2013-01-22
  • 打赏
  • 举报
回复
没有人知道么?或者可以用别的方法实现也行

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧