Seeking means to get Fabric to automatically (instead of user-interactively) interact with shell commands (and not just requests for passwords, but also requested user input
As Glenn, I would say use pexpect; in addition,
have a look at this wrapper I wrote to script the pexpect behaviour from fabric:
from ilogue.fexpect import expect, expecting, run
prompts = []
prompts += expect('What is your name?','John')
prompts += expect('Where do you live?','New York')
with expecting(prompts):
run('command')
See also my blogpost on fexpect or how to handle prompts in fabric with pexpect
For Windows users, use winpexpect. Make sure to use this version I linked as this version fixes some bugs in previous versions.
import sys, winpexpect
child = winpexpect.winspawn('ftp', ['<ftp host>'])
child.logfile = sys.stdout
child.expect('User.*:')
child.sendline('username')
child.expect('Password:')
child.direct_sendline('password')
child .sendline('ls')
print('Now enter the FTP interactive mode')
child.interact()
It's not either/or. You just need to run the fab command through pexpect:
child = pexpect.spawn('fab <task>')
child.expect('prompt:')
child.send('reponse to prompt')
... etc
The fab command is just like any other command, so it can be scripted through pexpect.