2017-12-05 3 views
1

내가 파이썬 완전히 새로운 오전과 다른 (MongoDB를) 하나의 데이터베이스에서 데이터를 복사하는 동안 진행률 표시 줄을 표시하고자 진행 막대의 새로운 인쇄 얻기. 내가 얻으려고하는 것은 하나의 진행률 표시 줄에 다른 데이터베이스 복사본의 발전률 (백분율)을 표시하는 것입니다. 복사본이 정상적으로 작동하고 문제는 모든 루프를 다시 인쇄하는 진행률 표시 줄의 업데이트 내에 있습니다. 이파이썬은 - 모든 업데이트를

coll_names = db_in.collection_names() 
    db_in_size = db_in.command('dbstats')['dataSize'] 

    bar = progressbar.ProgressBar(max_value=db_in_size).start() 
    for X in X_list:   
     for coll in coll_names: 
      db_out_size = db_out.command('dbstats')['dataSize'] 
      bar.update(db_out_size) 
      db_out[coll].delete_many({'X': X}) 
      data_in = db_in[coll].find({'X': X}) 
      if data_in.count() > 0: 
       db_out[coll].insert_many(data_in) 
    bar.finish()    

X_list 문자열이 포함되어 여기

는 스크립트입니다.

이 코드는 확실히 최적화도 하나의 진행 막대를 표시 할 수 있지만 나 참아주세요 올바른 방법을 포맷되지 않았습니다.

예상 결과 : Single progressbar on one line

현재 결과 : One progressbar print for every iteration

현재 결과 : 당신이 가질 수있는 입력을 사전에 tqdm

감사합니다.

+0

은 (https://pypi.python.org/pypi/tqdm) tqdm] 살펴. 개인적으로 나는 그것이 최고의 진보 바를 찾는다. 그 외에는 루프 본문에있는'print()'호출이 모든 진행률 표시 줄 라이브러리를 망칠 것입니다. 또한 터미널이 단순히 제어 기호를 지원하지 않을 수도 있습니다. – Sergei

+0

고맙습니다. 실제로 tqdm을 사용하여 유사한 결과를 얻으려고 시도했습니다. 나는 그것을 내 게시물에 추가 할 것이다. 터미널이 문제였습니다. 그것은, 빠른 답변 감사 만 터미널 문제처럼 –

답변

1

진행 막대는 라인의 시작에 커서를 뒤로 이동하는 "\ r에"문자 (캐리지 리턴)을 인쇄하여 작동합니다. 커서가 현재 행에 머무르는 한이 작동합니다. 아마도 여기에서 코드의 다른 곳으로 stderr에 개행 문자를 인쇄하고 있습니다. 이는 기본적으로 캐리지 리턴이 아무런 효과가 없다는 것을 의미합니다. 또는 캐리지 리턴을 지원하지 않는 터미널을 사용하고있을 수도 있습니다 (일부 IDE는 분명히).

+0

보인다. 내가 콘솔에서 examples.py 시도하고 같은 문제가있어. 내 코드 내에서 결함을 찾아 다녔다면 IDE의 플러그인 호환성이 내 마음을 초월하지 않았다. –