6

我已经用 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

首先,您的代码格式不正确,它应该看起来更像这样:

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 回答
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)
  3. subprocess.Popen()有很多功能(工具),所以它可以取代许多其他“工具”,(见这里)所以你也可以考虑一下。
于 2013-01-21T11:37:46.627 回答