6

私はほぼ 5 日間 Python で遊んでいますが、心から楽しんでいます。
私はこの課題を抱えていて、それを解決できませんでした。
課題は、10 秒ごとに top コマンドの出力を繰り返し、それをファイルに保存することです。
これが私がこれまでに行ったことです。

import time, os, threading

def repeat():
    print(time.ctime())
    threading.Timer(10, repeat).start()
    f = open('ss.txt', 'w')
    top = os.system("sudo top -p 2948")
    s = str(top)
    text = f.write(s)
    print(text)

repeat()
4

4 に答える 4

6

ここでの主な問題は、 への呼び出しがtopすぐに終了せず、新しいデータを表示するためにループで継続的に実行されることです。-n1オプションを指定することで、この動作を変更-nできます (反復回数を指定できます)。

次のようなことを試してください:

import subprocess

## use the following where appropriate within your loop
with open("ss.txt", "w") as outfile:
  subprocess.call("top -n1 -p 2948", shell=True, stdout=outfile)
于 2013-01-21T10:52:13.640 に答える
1

subprocess別のプロセスを呼び出すために使用することをお勧めします。file object出力を書きたいファイルのを渡す必要があります。例えば

    import time, os, threading, subprocess
    def repeat():
      print(time.ctime())
      threading.Timer(10, repeat).start()
      with open('ss.txt', 'w') as f:
          subprocess.call(["sudo","top","-p","2948"],stdout=f)

これにより、コマンドの出力がファイルに保存され、後で読み取ることができます。

于 2013-01-21T10:34:53.133 に答える
0

この機能を使用してtime.sleep()、10 秒待ってから続行することもできます。
これがあなたの望むものかどうかわからない...

import time,os

def repeat(seconds,filename):
    while True:
        print(time.ctime())
        f = open(filename, 'w')
        top = os.system("sudo top -p 2948")
        s = str(top)
        time.sleep(seconds)
        f.write(s)

repeat(5,'ss.txt')

また

  1. f.writeは、ファイルに書き込むときに値を返さNoneないため、その値を保存しても意味がありません。
  2. PEP 324をチェックしてくださいsubprocess。モジュールの機能が記載されています。(@ajmへのthx)
  3. subprocess.Popen()には多くの機能 (ツール) があるため、他の多くの「ツール」を置き換えることができるため (ここを参照)、それも考慮することができます。
于 2013-01-21T11:37:46.627 に答える
0

まず、コードが適切にフォーマットされていません。次のようになります。

import time, os, threading

def repeat():
  print(time.ctime())
  threading.Timer(10, repeat).start()
  f= open('ss.txt', 'w')
  top= os.system("sudo top -p 2948")
  s=str(top)
  text = f.write(s)
  print text

repeat()

それから、subprocess モジュールを調べることをお勧めします。これは、os.system よりも外部コマンドを呼び出すためのよりモダンでコーシャな方法です。ただし、コードが機能する場合、実際の問題は何ですか?

于 2013-01-21T10:29:51.243 に答える