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:
并一直等待用户输入;
哪位达人知道如何解决啊!!!!
...全文
2290 14 点赞 打赏 收藏 举报
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
没有人知道么?或者可以用别的方法实现也行
  • 打赏
  • 举报
回复
相关推荐
发帖
脚本语言
加入

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2013-01-22 07:14
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: