Windows で Fabric に自動応答させる

環境作り

env.py -c fabric
easy_install pycrypto-2.6.win32-py2.7.exe
easy_install fabric

winexpect

Python Fabric で、自動応答 -- pexpect - Guutaraの日記 を試してみたけれど、pexpect は Windows では動かないらしい。
代わりということで winpexpect を使ってみた。

easy_install pywin32-218.win32-py2.7.exe
easy_install winpexpect

試しに実行。

fab init

[127.0.0.1:2222] Executing task 'init'
Traceback (most recent call last):
  File "C:\virtualenv\fabric\lib\site-packages\fabric-1.6.0-py2.7.egg\fabric\main.py", line 739, in main
    *args, **kwargs
  File "C:\virtualenv\fabric\lib\site-packages\fabric-1.6.0-py2.7.egg\fabric\tasks.py", line 316, in execute
    multiprocessing
  File "C:\virtualenv\fabric\lib\site-packages\fabric-1.6.0-py2.7.egg\fabric\tasks.py", line 213, in _execute
    return task.run(*args, **kwargs)
  File "C:\virtualenv\fabric\lib\site-packages\fabric-1.6.0-py2.7.egg\fabric\tasks.py", line 123, in run
    return self.wrapped(*args, **kwargs)
  File "C:\Users\hokorobi\Documents\Program\Python\fabric\vagrant\fabfile.py", line 16, in init
    fexpect('init_aptget', 'Do you want to continue', 'Y')
  File "C:\Users\hokorobi\Documents\Program\Python\fabric\vagrant\fabfile.py", line 10, in fexpect
    child = winspawn(cmd)
  File "C:\virtualenv\fabric\lib\site-packages\winpexpect-1.5-py2.7.egg\winpexpect.py", line 346, in __init__
    logfile=logfile, cwd=cwd, env=env)
  File "C:\virtualenv\fabric\lib\site-packages\winpexpect-1.5-py2.7.egg\pexpect.py", line 429, in __init__
    self._spawn (command, args)
  File "C:\virtualenv\fabric\lib\site-packages\winpexpect-1.5-py2.7.egg\winpexpect.py", line 401, in _spawn
    startupinfo)
pywintypes.error: (2, 'CreateProcess', '\x8ew\x92\xe8\x82\xb3\x82\xea\x82\xbd\x83t\x83@\x83C\x83\x8b\x82\xaa\x8c\xa9\x82\xc2\x82\xa9\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B')

どうも virtualenv を使っていると駄目みたい。
sys.exec_prefix の python.exe を見にいっているみたいで、virtualenv を使っていると python.exe は Scripts の中にあるのか。
とりあえず素の環境でこんなの動かした。


fork 版 winexpect

winpexpect / weyou こちらの winpexpect だと virtualenv でも使えるみたい。

env.py fabric
pip uninstall winpexpect
hg clone ssh://hg@bitbucket.org/weyou/winpexpect
cd winpexpect
python setup.py install
fab init

動いた。

wexpect

いらない子だけど、fork 版の winexpect を見付ける前に wexpect を使っていた。
よくわからないエラーが出ていたので、出さないようにしたり。