【问题标题】:Python subprocess, execute shell command which prompts for passwordPython子进程,执行提示输入密码的shell命令
【发布时间】:2021-05-15 09:22:50
【问题描述】:

我在 python 中使用子进程来执行一个自定义 vpn 命令,该命令除了要执行的密码。 下面是询问密码的命令:

./vpn -u <user_id> -d "description" /var/tmp/1.txt
password: XXXX

下面是 vpn shell 命令,非常适合上面的命令。

/usr/bin/expect -c 'spawn  ./vpn -u <user_id> -d "description" /var/tmp/1.txt; expect "Password"; send "<Password here>\r"; interact'

在 python 中,我试图通过下面的子进程模块实现相同的效果,下面执行的脚本是输出。

"(b"\x1b[31m\xe2\x9c\x97 无法从控制台读取'user id'密码。\x1b[0m""

import subprocess

args = ["./vpn", "-u", "<user_id>", "-d", "description", "/var/tmp/1.txt"]
# args = ['sudo','cat', '/var/tmp/1.txt']

proc = subprocess.Popen(args, 
                        stdin=subprocess.PIPE, 
                        stdout=subprocess.PIPE, 
                        stderr=subprocess.PIPE)

proc.stdin.write('<passowrd>'.encode())
stdout, stderr = proc.communicate()

print(stdout)

注意:如果我在写密码之前使用 time.sleep(2),它会提示我在控制台中输入密码而没有任何错误,我的目标是在脚本中提供密码。

在python中有没有更好的方法来传递shell命令,因为这很长,或者在子进程模块中提供密码无缝执行。

【问题讨论】:

  • “vpn”可执行文件是否有任何类型的非交互式密码选项?就像从文件或环境变量中读取它一样?
  • 不,这是一个自定义二进制文件,没有其他选项可以提供密码。

标签: python python-3.x python-2.7 subprocess


【解决方案1】:

您正在使用 Expect for Shell/Bash CLI 命令。使用 Python 时,只需使用 pexpect 即可在 Python 中获得相同的功能。

https://github.com/pexpect/pexpect探索pexpect

在执行程序中传递密码的示例在这里:https://github.com/pexpect/pexpect/blob/master/examples/passmass.py

例子:

import pexpect
child = pexpect.spawn('ftp ftp.openbsd.org')
child.expect('Name .*: ')
child.sendline('anonymous')
child.expect('Password:')
child.sendline('noah@example.com')

【讨论】:

    【解决方案2】:

    我在 shell 脚本中尝试过,它运行良好:只要对任何人都有帮助:

    /usr/bin/expect<<vpn
    spawn ./vpn -u <user_id> -d "description" /var/tmp/1.txt
    expect "Password"
    send "<password here>\r"
    interact
    sleep 5 
    vpn
    echo "It's done"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 2011-05-03
      • 2012-04-03
      • 1970-01-01
      相关资源
      最近更新 更多