使用结构时减少远程命令的详细程度

时间:2015-02-23 07:24:37

标签: python terminal fabric tty

使用fabric时,我有时会从apt,git等程序中获得这样的输出:

[tfb@192.168.59.103:49369] out: Receiving objects:   6% (3318/55289)   
[tfb@192.168.59.103:49369] out: Receiving objects:   7% (3871/55289)   
[tfb@192.168.59.103:49369] out: Receiving objects:   8% (4424/55289)   
[tfb@192.168.59.103:49369] out: Receiving objects:   9% (4977/55289)   
[tfb@192.168.59.103:49369] out: Receiving objects:  10% (5529/55289)   
[tfb@192.168.59.103:49369] out: Receiving objects:  11% (6082/55289)   
[tfb@192.168.59.103:49369] out: Receiving objects:  12% (6635/55289)   
[tfb@192.168.59.103:49369] out: Receiving objects:  13% (7188/55289)   

我怀疑这与没有正确支持回车的终端类型有关。两个问题:

  1. 使用Fabric时可以阻止这种情况发生吗?

  2. 用于讨论终端需要支持以避免此问题的功能的术语是什么?例如。为什么会发生这种情况

2 个答案:

答案 0 :(得分:1)

通过FreeNode上的#fabric

  

redkrieg:这不是回车,你的申请正在发送   对终端的更新。如果你有些应用程序不会这样做   禁用pty,其他人不关心他们的环境并试图弄乱   无论你的屏幕如何。如果可能的话,寻找“批处理模式”   在程序中键入选项或抑制结构中的输出。

这是有道理的,因为Fabric的默认功能集声称通过线路缓冲正确支持回车。只是禁用pty似乎解决了问题,例如

run('git clone foo ~/foo', pty=False)

解决了git的问题,以及类似的apt和大多数其他主要违法者。有趣的是,当远程用户是root用户时,这可能不是问题,因为它拒绝创建PTY,而不是因为root使用的PTY具有一些特殊属性

答案 1 :(得分:0)

尝试使用以下行

import fabric
from fabric.api import env

fabric.state.output['running'] = False
env.output_prefix = False