簡體   English   中英

有沒有辦法使用python將終端命令的輸出存儲到文件中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM