2012-06-06 20 views

回答

2

使用标准库subprocess

import subprocess 
passwd='mypassword' 
subprocess.call('echo %s|sudo -S vbetool dpms off' % passwd, shell=True) 
+0

但它要求输入sudo密码。我需要运行这个代码没有密码。如果它像那样工作,那对我来说非常有用。请为我提供解决方案 – Viswa

+0

它似乎复制到http://stackoverflow.com/questions/5191878/change-to-sudo-user-within-a-python-script – iMom0

+0

千谢谢。它的工作正常 – Viswa

0

使用sudo -S它用于从标准输入,而不是terminal.Store它在一个文件中读取密码,说passwd文件,然后执行:

import os 
os.system("sudo -S vbetool dpms off < passwd") 
+0

stdin位于何处。我想你说我需要在该文件中提供密码。 – Viswa

+0

密码必须保存在一个文件中,根据我的回答它是'passwd'。 – rjv

0

或者

您可以使用pexpect库,它通常用于自动执行需要用户输入的程序。

import pexpect 

child = pexpect.spawn('sudo vbetool dpms off') 
child.expect('Password:') 
child.sendline(password) 
child.expect(pexpect.EOF, timeout=None) 
output_data = child.before 

在这里,您只需提供您期待的匹配提示,然后发送密码。之后,您可以收集输出并处理它。

这是更通用的,当你有不接受密码管道的程序时很有用。

可以安装该模块与

easy_install pexpect 
or 
pip install pexpect 
+0

@Viswa:检查此解决方案是否适合您。 – pyfunc