2017-09-11 5 views
0

私は株式市場の価格を追跡し、stderrを使って同じ行をリフレッシュするユーザーに出力するPythonプログラムを書こうとしています。これはコードの単純化されたバージョンです(プログラムが何かをしていることを確認する):Pythonの最後のものを実行している間に端末の行を更新しますか?

import random 
import schedule 
import time 
import sys 

def printran(): 
    a = "\rFirst Line is: " + str(random.randint(1,10)) 
    sys.stderr.write(a) 

schedule.every(2).seconds.do(printran) 

while True: 
    schedule.run_pending() 
    time.sleep(1) 

私の問題は、次のとおりです。

a)はどのように私は複数行にコンソール出力を "リフレッシュ" しますか?

私のようなものを試してみました:

a = "\rFirst Line is: " + str(random.randint(1,10)) + "\n\rSecond Line is: " + str(random.randint(2,20)) 

が、出力は混乱であると同時に機能が本当に私を終了していないので、明らかに\ nコマンドは、常に新しい行に

B)が生成されます他のものを行うことはできません、私はマルチスレッドを使用する必要がありますか?

c)可能な限り簡単で移植性があり、OSに依存しないソリューションを見つける(Linux、OSX、Winで動作する必要があります)。

答えて

0
import random 
import schedule 
import threading 
import time 

def printran(): 
    print("First Line is: " + str(random.randint(1,10))) 


def run(): 
    schedule.every(2).seconds.do(printran) 
    while True: 
     schedule.run_pending() 
     time.sleep(1) 


if __name__ == "__main__": 
    t = threading.Thread(target=run) 
    t.start() 

また、あなたはAPScheduler を使用することができます。しかし、次のコードsched.start()に待機しません、それがメインで停止します。

import random 
from apscheduler.schedulers.background import BackgroundScheduler 
import time 

def printran(): 
    print("First Line is: " + str(random.randint(1,10))) 


if __name__ == "__main__": 
    sched = BackgroundScheduler() 
    sched.add_job(printran, 'interval', seconds=2) 
    sched.start() 
    # wait 10 seconds and exit 
    time.sleep(10) 

は(私が勝つ、Mac上でチェックしていなかったが、それはLinux上で動作します)

クロスプラットフォームであるべき
関連する問題