通过stdin stdout和python中的stdr与脚本交互

时间:2015-04-03 16:58:13

标签: python shell

我可以使用哪个python库与交互式shell脚本/二进制文件进行交互。

例如,我如何运行

sudo bla bla bla
如果sudo问的话,那么从python中接下来将密码写入subprocess stdin?

更新。 我会尝试pexpect库。

2 个答案:

答案 0 :(得分:1)

您的示例是一个非常特殊的情况,因为sudo从终端读取密码 - 而不是从stdin读取密码。因此,简单的重定向不适合该任务。

然而,sudo有一点知道功能,允许调用外部程序来读取密码。这是绝对不是我会鼓励的东西,但如果你真的想这样做,并且对于以纯文本形式存储密码作为脚本的一部分的想法很容易,你可能会这样:

  1. 准备一个帮助脚本来发送密码:

    #!/bin/sh
    
    echo "p@sswd"
    
  2. 从Python中,将SUDO_ASKPASS设置为您的助手脚本,然后

  3. 调用sudo -A

    >>> import os
    >>> import subprocess
    >>> os.environ['SUDO_ASKPASS'] = '/path/to/your/helper/script.sh'
    >>> subprocess.Popen(["/usr/bin/sudo", "-A", ....])
    

答案 1 :(得分:0)

图书馆pexpect就是我想要的!