2011-12-20 78 views
1

我目前正在寫一個非常簡單的終端工具,我想實現以下行爲。如何修改標準輸出?

終端應顯示:

Downloading "Something" ... 

而且我已經完成下載後,我想替換該行:

Downloading "Something" [Done] 

我已經看到這種情況o創建以下的動畫:

[-] 
[\] 
[|] 
[/] 

由於我沒有太多的終端工具經驗,我不知道如何實現這個簡單的行爲。任何幫助將不勝感激。

+0

'clear; echo「|」;睡1;清除; echo「/」; sleep 1; clear; echo「 - 」; sleep 1; clear; echo「\\」; sleep 1; clear; clear; echo「|」;睡1;清除; echo「/」; sleep 1; clear; echo「 - 」; sleep 1; clear; echo「\\」; sleep 1; clear; clear; echo「|」;睡1;清除; echo「/」; sleep 1; clear; echo「 - 」; sleep 1; clear; echo「\\」; sleep 1; clear; clear; echo「|」;睡1;清除; echo「/」; sleep 1; clear; echo「 - 」; sleep 1; clear; echo「\\」; sleep 1; clear; clear; echo「|」;睡1;清除;回聲「/」;睡眠1;清除;回聲「 - 」;睡眠1;清除;回聲「\\」;睡眠1;清除 – 2011-12-20 06:19:06

+0

只是爲了好玩......不被重視。 :) – 2011-12-20 06:19:41

回答

3

用退格字符 - \b

不要忘記刷新輸出流,很可能緩衝。

3

終止與「\ R」的線的中間版本。任何後續寫入都會覆蓋該行(只要新寫入至少與原始寫入一樣長)。

a similar question不是很久以前;例如在C++中的代碼示例見my answer there

2

如果它是一個ANSI終端,你可以使用ANSI Escape Sequences移動光標回線或與此有關的任何其他職位。然後您可以從您將光標移動到的位置開始編輯。

2

嘗試此:P:

void test() { 
    const char *msg = "Downloading %s%s"; 
    printf(msg, "file", "...\r"); 
    printf(msg, "file", "[Done]\n"); 
} 

的魔術是使用爲 「\ r」(CR)來實現的。

2

確實,使用'\b'來清除python中的前一個值並不難(請參閱this question的答案)。我建議你使用python-progressbar

​​

其原因不僅在於它可能做你要找的內容很容易,而且還可以添加其他部件(ETA,FileTransferSpeed,百分比,... ),如果您希望以後根據您的需求使進度條看起來更好。