How to get Fabric to automatically (instead of user-interactively) interact with shell commands? Combine with pexpect? How to get Fabric to automatically (instead of user-interactively) interact with shell commands? Combine with pexpect? python python

How to get Fabric to automatically (instead of user-interactively) interact with shell commands? Combine with pexpect?


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


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.


For Windows users, use winpexpect. Make sure to use this version I linked as this version fixes some bugs in previous versions.

import sys, winpexpectchild = winpexpect.winspawn('ftp', ['<ftp host>'])child.logfile = sys.stdoutchild.expect('User.*:')child.sendline('username')child.expect('Password:')child.direct_sendline('password')child .sendline('ls')print('Now enter the FTP interactive mode')child.interact()