![](/img/trans.png)
[英]How can I store the output of a command I ran using SSH from a Python script into a file?
[英]Is there a way I can store the output of a terminal command into a file using python?
我想使用Python將終端命令top
的輸出存儲到一個文件中。 在終端中,當我鍵入top
並按回車鍵時,我得到的是實時輸出,因此它會不斷更新。 我想將其存儲到文件中固定的時間,然后停止寫入。
file=open("data.txt","w")
file.flush()
import os,time
os.system("top>>data.txt -n 1")
time.sleep(5)
exit()
file.close()
我嘗試過使用time.sleep()
然后exit()
,但是它不起作用,並且可以停止top
的唯一方法是通過Control + C
在終端中,該過程保持運行,並且數據被連續寫入到文件上,這是不理想的,就像人們猜到的那樣
為了清楚起見:我知道如何將輸出寫入文件,我只是想在一段時間后停止寫入
system
將等待子進程的結束。 如果您不希望這樣做,Pythonic方法是直接使用子流程模塊:
import subprocess
timeout=60 # let top run for one minute
file=open("data.txt","w")
top = subprocess.Popen(["top", "-n", 1], stdout=file)
if top.wait(timeout) is None: # wait at most timeout seconds
top.terminate() # and terminate child
Panonoic方法(強烈建議使用健壯的代碼)將使用top
的完整路徑。 我不在這里,因為它可能取決於實際系統...
您可能面臨的問題是os.system作為當前進程的一部分啟動該進程。 因此,在您運行的命令完成執行之前,腳本的其余部分將不會運行。
我認為您要執行的操作是在另一個線程上執行控制台命令,以使運行python腳本的線程可以在命令在后台運行時繼續運行。 有關更多信息,請參見在新線程上運行python程序 。
我建議類似的東西(未經測試):
import os
import time
import multiprocessing
myThread = multiprocessing.process(target=os.system, args=("top>>data.txt -n 1",))
myThread.start()
time.sleep(5)
myThread.terminate()
話雖如此,您可能需要考慮os.system()的線程安全性,如果它不是線程安全的,則需要找到一個替代方法。
還有一點值得注意(我對此知之甚少)是,以這種方式終止線程可能不是理想的選擇,請參見此處的一些答案: 有沒有辦法殺死線程?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.