2016-07-16 1 views
1

私は本を読んでそこにあるのとまったく同じコードをコピーしました。コードが行うべきことは、位置が常に同じ場所で更新されるように\ bが行を削除するということです。私の場合、それは奇妙な青い髪を引きますが。私はフラッシュ=真ではなくそれを試みたが、それは同じ結果を与える。 b pythonは文字を削除しません

while True: 
    x,y = pyautogui.position() 
    posStr = 'X: '+ str(x).rjust(4)+ ' Y: ' +str(y).rjust(4) 
    print (posStr, end='') 
    print('\b' *len(posStr), end='', flush= True) 

どのようにして、出力が更新されたの効果を得ることができますか?

編集: は、より正確には: 私は次のコードがある場合:

import pyautogui 
while True: 
    x,y = pyautogui.position() 
    posStr = 'X: '+ str(x).rjust(4)+ ' Y: ' +str(y).rjust(4) 
    print (posStr, end='') 
    print('\b' *len(posStr), end='', flush= True) 

を私は得ること:http://i.imgur.com/U8fsvIx.png 私それが実際に必要がありますが(\ bのために印刷された奇妙な青い丸印で無限ライン

import pyautogui 
while True: 
    x,y = pyautogui.position() 
    posStr = 'X: '+ str(x).rjust(4)+ ' Y: ' +str(y).rjust(4) 
    print ('\r'+ posStr, end='') 

私はトンを得る:私はコードを使用する場合、文字)

を削除彼は次の結果を得ました:http://i.imgur.com/nznN2H3.png 私は無限のテキスト行です。 どういうわけか、私はすでに '\ r'または '\ b'のいずれかで書かれたものを削除することができません。

だから問題は何ですか?

+0

'\ b'は、* shelまたはconsole *にステップを返すよう指示します。キャラクターの位置も消去される場合は、正確なシェルやコンソールに依存します。大部分は*ではありません。 –

+1

一般に、 '\ r'に続いて古いものをカバーするのに十分な新しいテキストが続いていると、より確実に行をクリアすることができます。 –

+0

[エコー回線を削除する方法](http://unix.stackexchange.com/q/26576)も参照してください。 –

答えて

1
while True: 
    x, y = pyautogui.position() 
    print('X: %4d Y: %4d' % (x, y), end = '\r') 

\r次の印刷が同じに書き込まれる原因となります。あなたの文字列は同じ長さでなければならないか、空白を埋め込むことができます。

\n改行を開始する\rはありません。

代替ソリューション:

while True: 
    x, y = pyautogui.position() 
    print('X: %d Y: %d' % (x, y) + ' ' * 20, end = '\r') 

+ ' ' * 20のみ'X: %d Y: %d'パディング無し(%4d又は+ ' ' * 20)を用いてライン

の残りの部分を削除するために、スクリーン20個のスペースを書き込む

# x, y = 1000, 1000 prints: 
X: 1000 Y: 1000 
# x, y = 30, 40 prints: 
X: 30 Y: 401000 

最初の印刷後にはゼロが残り、汚れたデータが得られます。

+0

私は今テストすることはできませんが、行の先頭に '\ r'を追加することは可能でしょう。そうすれば、文字列をスペースで埋め込む必要はありません。しかし、最後の行は '\ n'で終了する必要があります。 – TidB

+0

が掲載されています。 '' \ r ''で始めると、' '''(何もない) ''で終わらなければなりません。 '' \ n "'は改行を引き起こし、あなたは上がるこ​​とができません。パディングは、行の実際の内容をクリアするためのものです。 –

+0

@ martijn-pietersの2番目のコメントを読む、彼は正しいです。 –

関連する問題