我正在使用Python的結構通過ssh在遠程主機上執行一些任務。
當顯示子任務的進度條時,其中一項任務在其輸出中使用回車符。類似這樣:處理Python結構中的回車( r)字符
int main(int argc, char* argv[]) {
int i;
for (i = 0; i <= 5; ++i) {
printf("\rProgress: %d%%", (int)(100 * ((float)i/5)));
fflush(stdout);
sleep(1);
}
printf("\n");
return 0;
}
當這與Python的面料上運行:
def some_task():
with settings(user = 'root'):
run('./task_with_progress_bar.out')
tasks.execute(some_task, hosts = ['server_name'])
面料會忽略和的\r
,而不必在一條線路的進度條,我會得到的是:
[server_name] Executing task 'some_task'
[server_name] run: ./task_with_progress_bar.out
[server_name] out:
[server_name] out: Progress: 0%
[server_name] out: Progress: 20%
[server_name] out: Progress: 40%
[server_name] out: Progress: 60%
[server_name] out: Progress: 80%
[server_name] out: Progress: 100%
[server_name] out:
好像\r
被視爲\n
...
上面的例子並不算太糟糕,但我正在運行的實際任務中充滿了進度條,這些進度條以較小的步進進行,並且這會污染整個控制檯併產生不必要的輸出。
有沒有辦法以某種方式定製輸出,以便Fabric不會忽略\r
,但仍保持相同的一般格式:[<server_name>] <action_being_taken>
?我喜歡這種格式,它整潔乾淨。
間隔是否要抑制進度輸出,而不是其他的輸出? – malbarbo
不,我不打壓輸出。我仍然希望它以[[server_name]]的格式顯示,只是進度條不會以多行打印。我希望它被打印在顯示進度的一行中... –