我是初学者。我正在尝试编写代码来帮助我更改我的MAC地址,但是当我运行此python代码时
import subprocess
subprocess.call("sudo ifconfig",shell=True) # shutdown interface`
它要求我输入sudo的密码。
请帮助我编写代码以从Python脚本输入密码并传递此etape。
答案 0 :(得分:0)
您可以遵循最佳做法,并使用公认的方法与子流程进行通信。
import subprocess
out = subprocess.run('sudo -S ls', shell=True, input=b'123', stdout=subprocess.PIPE)
print(out.stdout)
您可以在docs中广泛阅读有关此操作方法的内容,但请注意以下几点:
编程起来容易得多,因为您拥有期望的常用编码工具。如异常和返回值。
在上面的示例中,我们使用推荐的-S
来告诉sudo
使用常规的stdin
通信通道来接收输入数据。每个进程都带有3个通信通道,stdin
,stdout
和stderr
。他们的名字暗示了他们的意图。 stdin
表示输入,stdout
表示正常输出(无错误),stderr
表示表示错误。敏感输入不使用常规stdin
,这是sudo
在错误消息中所建议的。
我们要求subprocess.run
使用语法为stdout
的新subprocess.PIPE
频道。因为,否则,它将从其父级(Python脚本)继承相同的通信通道,因此sudo -S ls
命令输出将立即转储到Python脚本输出。通常,这是不希望的。
最后,我们打印结果。
答案 1 :(得分:-1)
为此,最好使用pexpect(与pip install pexpect
一起安装):
import pexpect
pipe = pexpect.spawn("sudo ifconfig")
pipe.expect_exact("[sudo] password for kali: ")
pipe.sendline("your_password")
pipe.expect(pexpect.EOF, timeout=None)