使用python保存最高输出

时间:2013-01-21 10:20:00

标签: python

我已经玩了近五天的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 个答案:

答案 0 :(得分:3)

这里的主要问题是对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)

答案 1 :(得分: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)

这应该将命令输出保存到稍后可以读取的文件中。

答案 2 :(得分:1)

您也可以使用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来说)
  3. subprocess.Popen()有很多功能(工具),因此它可以取代许多其他“工具”,(请参阅here),因此您也可以考虑这一点。

答案 3 :(得分: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()

然后,您可能希望查看子进程模块 - 它是比os.system更现代和更犹豫的方式来调用外部命令。但是,如果您的代码有效,那么实际问题是什么?