无法为带有子进程的进程提供密码 [python]

Bob*_*Bob 2 python subprocess

我正在使用 subprocess 从 python 中运行脚本。我试过这个

选项1

password = getpass.getpass()
from subprocess import Popen, PIPE, check_call  
proc=Popen([command, option1, option2, etc...], stdin=PIPE, stdout=PIPE, stderr=PIPE)  
proc.stdin.write(password)  
proc.stdin.flush()  
stdout,stderr = proc.communicate()  
print stdout  
print stderr  
Run Code Online (Sandbox Code Playgroud)

和这个

选项2

password = getpass.getpass()
subprocess.call([command, option1, option2, etc..., password])
Run Code Online (Sandbox Code Playgroud)

它们都不起作用,即密码没有发送到进程。如果我使用选项 2 并且不提供密码,子进程会要求我提供密码并且一切正常。

dan*_*ano 5

这是如何使用pexpect的一个非常基本的示例:

import sys
import pexpect
import getpass

password = getpass.getpass("Enter password:")

child = pexpect.spawn('ssh -l root 10.x.x.x "ls /"')
i = child.expect([pexpect.TIMEOUT, "password:"])
if i == 0:
    print("Got unexpected output: %s %s" % (child.before, child.after))
    sys.exit()
else:
    child.sendline(password)
print(child.read())
Run Code Online (Sandbox Code Playgroud)

输出:

Enter password:

bin
boot
dev
etc
export
home
initrd.img
initrd.img.old
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
selinux
srv
sys
tmp
usr
var
vmlinuz
vmlinuz.old
Run Code Online (Sandbox Code Playgroud)

这里有更详细的例子。