Python Fabric 不允许我将输出管道到 less 吗?

1 投票
1 回答
1184 浏览
提问于 2025-04-16 23:05

我第一次设置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

撰写回答