我已经玩了近五天的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()
答案 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')
答案 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更现代和更犹豫的方式来调用外部命令。但是,如果您的代码有效,那么实际问题是什么?