Python Fabric 不允许我将输出管道到 less 吗?
我第一次设置fabric,遇到了把fabric的输出传给less的问题。例如,如果我运行:
fabric deploy |less
(其中deploy是我的部署函数)
我从fabric那里得到了以下错误信息:
IOError: [Errno 22] Invalid argument
这个错误是因为在远程主机上执行的run()
命令引起的。
如果我在run()
的参数中加上pty=False
,就能正常工作。不过,这样的话,每次运行命令时都得加上这个参数。而且,我觉得这会影响到提示和输入数据的情况(显然在那些情况下我不会把输出传给less)。
我该怎么解决这个问题?我是不是应该对所有命令都设置tty=false
?
1 个回答
2
为了将来参考,我通过对operations.py应用一个补丁来解决了这个问题,具体内容可以在这里看到:
http://code.fabfile.org/attachments/56/operations.patch
如果不这样做,下面的代码会导致这个问题出现:
from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm
import re
import sys
def test():
run('ls')
这个问题会在你执行以下命令时出现:
fab -H myhost test |less
希望这对某些人有帮助……我还是不明白为什么这么老的bug在fabric的最新版本中还没有被修复。
-Dustin