Python與Linux有著密切的關系。Linux是一個自由軟體團或野和開放源碼的類Unix操作系統,Python是一種高級編程語言團孫。它們都是開源的,並且可以免費使用。
Python在Linux系統中得到了廣泛應用,特塌喊別是在系統管理、網路編程、Web開發、科學計算、數據分析等領域。Linux作為一種強大的伺服器操作系統,Python也因其簡潔、易讀、易學以及豐富的庫而成為了Linux伺服器端開發的重要工具。同時,Python內置了許多Linux系統操作的模塊和工具,如os和subprocess模塊,使得Python在與Linux交互和管理方面表現得非常出色。
此外,Linux和Python社區之間也有很多的合作和交流,如通過Python實現Linux桌面環境(如Ubuntu Unity桌面)和Linux軟體包管理器(如apt-get)等。因此,學習Python也可以幫助人們更好地理解和使用Linux操作系統。
⑵ 如何在linux系統中安裝python
linux系統中安裝python包括以下滾鍵罩三個步驟:
⑶ 如何使用Python動態控制Linux系統的內存佔用百分比
如何使用Python動態控制Linux系統的內存佔用百分比?
近期有網上朋友尋求幫助:如何通過腳本動態控制Linux系統的內存佔用百分比?經過一番網路+編寫調試,終於初步完成了動態控制Linux系統內存佔用百分比。現寫出來以幫助更多的朋友。
1 前言
根據需求是動態控制Linux系統內存佔用百分比,比如當前內存佔用30%,如果設置內存佔用為70%,則需要申請內存使達到佔用70%;如果再降低到40%,則需要釋放部分申請的內存。其實腳本的本質是內存動態申請與釋放。
注意:因為Python腳本運行之前內存有一定佔用,故設定內存佔用不能低於該百分比。
2 內存動態申請
通過查詢資料,使用Python動態申請內存塊,可以使用ctypes包中的函數,導入包及代碼如下所示:
>>> from ctypes import *
>>> mem=create_string_buffer(1024)
說明:內存申請使用create_string_buffer()函數,上面申請了1024位元組的內存塊。
下面演示申請100MB內存前後變化
申請前如下圖所示:
使用代碼如下:
>>>mem=create_string_buffer(104857600)
申請後如下圖所示:
從上述兩幅圖中可以看出,申請內存前內存佔用295MB,申請後內存佔用397MB,增加了約100MB內存佔用。
3 內存動態釋放
由於Python對內存是有垃圾回收機制的,採用對象引用計數方式。當對象的引用計數為0時,啟動垃圾回收GC。此處內存動態釋放就是使用該原理。
代碼如下:
>>> mem=None
釋放後內存佔用如下圖所示:
內存佔用由397MB降低到297MB,釋放了100MB內存佔用。
說明:將None賦值給對象mem後,mem對象的引用計數即為0,此時垃圾回收啟動,釋放mem對象佔用的內存。
4 系統總內存、佔用內存檢測
由於需要設定內存佔用百分比,故需要獲取系統總物理內存和佔用內存。本文使用的方法是讀取系統文件「/proc/meminfo」,從中解析出總內存大小以及當前內存佔用大小等內存相關的信息。該文件內容格式如下圖所示:
代碼片段如下所示:
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['MemUsed']= mem['MemTotal']- mem['MemFree']
說明:按行讀取meminfo文件內容,創建字典對象mem,將meminfo文件第一列設置為mem對象的鍵值,將meminfo文件第二列數字設置為mem對象的值。
5 獲取用戶輸入百分比
通過讀取鍵盤輸入字元串,然後轉換為數字實現接收用戶輸入的百分比,代碼如下所示:
input_str=raw_input("Input UsedMemory`s Rate or q to exit:")
rate=float(input_str)
注意:此處鍵盤輸入的都是字元串,需要進行字元串轉換為數字,使用float()或long()函數進行轉換。
6 動態設置內存佔用百分比測試
測試使用兩個Python腳本文件,分別是test.py和mem_rate.py,其功能分別是查看當前內存佔用和動態設定內存佔用百分比。如下圖所示:
注意:上述兩個文件需要使用「chmod +x *.py」修改為可執行屬性。
6.1 查看當前內存佔用
查看當前內存佔用百分比,使用上述test.py文件,運行命令為「./test.py」,運行結果如下圖所示:
當前使用內存為320MB,佔用百分比為17%。
6.2 動態設置內存佔用百分比
動態設置內存佔用百分比使用上述mem_rate.py腳本,注意該腳本文件第一行代碼為「#!/usr/bin/python2.6」,表示該腳本使用python2.6程序運行。該行需要修改為待運行Linux系統中Python實際的安裝程序路徑。
動態內存百分比設置界面如下圖所示:
處於待輸入狀態。另外顯示了當前內存佔用(321MB),總內存大小(1869MB)以及內存佔用百分比(17%)。
如果此時設置內存佔用百分比為80%,則腳本會每次申請10MB空間,直至內存佔用接近或等於80%為止。如下圖所示:
內存申請過程如下圖所示:
內存申請過程中佔用百分比變化為:35%,45%,56%,70%,…
mem_rate.py運行過程如下圖所示:
內存申請過程中佔用變化為:1461MB,1471MB,1481MB,1491MB。
此時如果內存佔用百分比設置為20%,則需要釋放一部分內存。
test.py腳本運行過程如下圖所示:
由於釋放內存運行較快,抓取到最後結果
內存佔用為20%。
mem_rate.py腳本運行過程如下圖所示:
內存釋放過程中內存佔用為:413MB,403MB,393MB,383MB,最後內存佔用穩定在20%,383MB。
輸入「q」或「Q」退出內存佔用百分比設定過程,如下圖所示:
此時內存佔用如下圖所示:
內存佔用恢復到運行mem_rate.py腳本之前狀態,17%,321MB。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
附:完整Python腳本代碼
test.py
------------------------------------------------------------------------------------------------
#!/usr/bin/python2.6
def memory_stat():
mem = {}
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['MemUsed']= mem['MemTotal']- mem['MemFree']
# - mem['Buffers']- mem['Cached']
return mem
mem=memory_stat()
print("Used(MB):%d"%(long(mem['MemUsed'])/1024/1024))
print("Rate:%d%%"%(100*long(mem['MemUsed'])/float(mem['MemTotal'])))
§§§§§§§§§§§§§§§§§§§§§§§§§§
mem_rate.py
---------------------------------------------------
#!/usr/bin/python2.6
from ctypes import *
# Get Memory Info(Total, Used... Byte)
def get_memory_stat():
mem = {}
f = open("/proc/meminfo")
lines = f.readlines()
f.close()
for line in lines:
if len(line)< 2:continue
name = line.split(':')[0]
var = line.split(':')[1].split()[0]
mem[name]= long(var)* 1024.0
mem['MemUsed']= mem['MemTotal']- mem['MemFree']
# Return MemroyInfo Object
return mem
# Get Simple Memory Info
def get_memory_info(mem):
# Byte -> MB
n=1024* 1024
used=float(mem['MemUsed'])/ n
total=float(mem['MemTotal'])/ n
rate=used/total* 100
smp={'used':used,'total':total,'rate':rate}
return smp
# Display Current Memory Info
def print_memory_info(mem):
# Get SimpleMemory Info
smp=get_memory_info(mem)
print("Used(MB):%d\tTotal(MB):%d\tUsedRate:%d%%"%(smp['used'], smp['total'], smp['rate']))
# Get Rate Of Memory Used To Be Setted(Integer Formate)
def input_memory_used_rate(org_rate):
# Byte -> MB
n=1024* 1024
while(True):
mem=get_memory_stat()
print_memory_info(mem)
input_str=raw_input("Input UsedMemory`s Rate or q to exit:")
if(len(input_str)== 0):
continue
if("q"== input_str):
info={'rate':0,'used':mem['MemUsed']/ n}
return info
if("Q"== input_str):
info={'rate':0,'used':mem['MemUsed']/ n}
return info
try:
rate=float(input_str)
if((rate>=org_rate)and (rate<=95)):
info={'rate':rate,'used':mem['MemUsed']/ n}
return info
else:
print("Please inputa valid number(%d%%~95%%)."%(org_rate))
except:
print("Please inputa valid number(%d%%~95%%)."%(org_rate))
# Set Rate Of Memory Used
def set_memory_used_rate(new_rate, total, pre_used,list):
if(new_rate==0):
return None
dest_mem=total* new_rate /100.0
# 10MB
mb10=10485760
n_chg=10
# Free Memory OrAllocate Memory ?
is_new=dest_mem>pre_used
cur_used=pre_used
while(True):
# To Calc FreeMemory Or Allocate Memory ?
need_new=dest_mem-n_chg>=pre_used
need_del=dest_mem+n_chg<=pre_used
# Need To AllocateMemory
if(is_new):
if(need_new):
p=create_string_buffer(mb10)
list.append(p)
dest_mem=dest_mem-n_chg
cur_used=cur_used+n_chg
else:
return"end"
# Need To FreeMemory
else:
idx=len(list)-1
if(need_deland (idx>=0)):
p=list[idx]
del list[idx]
p=None
dest_mem=dest_mem+n_chg
cur_used=cur_used-n_chg
else:
return"end"
print("****** MemoryUsed(MB):%d"%(cur_used))
# Entry Of Program
# List Of Memory Object, 10MB Of One Object
list=[]
# Get Current Memory Info
mem=get_memory_stat()
# Get Simple Memory Info
smp=get_memory_info(mem)
org_rate=smp['rate']
total=smp['total']
while(True):
# Get Rate OfMemory To Be Used
info=input_memory_used_rate(org_rate)
new_rate=float(info['rate'])
pre_used=float(info['used'])
# Set Rate OfMemory To Be Used
rtn=set_memory_used_rate(new_rate, total, pre_used, list)
if(not rtn):
print("bye!")
exit()
⑷ 《PythonUNIX和Linux系統管理指南》pdf下載在線閱讀,求百度網盤雲資源
《Python UNIX和Linux系統管理指南》(基弗特 (Gift, Noab))電子書網盤下載免費在線閱讀
資源鏈接:
鏈接: https://pan..com/s/1o7aYwEqisD0WIASv8Il3lw
書名:Python UNIX和Linux系統管理指南
作者:基弗特 (Gift, Noab)
譯者:楊明華
豆瓣評分:7.5
出版社:機械工業出版社
出版年份:2009-9
頁數:417
內容簡介:
《Python UNIX和Linux系統管理指南》介紹了Python語言如何為管理uNIx和Linux伺服器提供各種更加有效的任務處理方式。書中各章都提出了具體的管理問題,如並發或數據備份,然後通過Python示例提供了解決方案。通過《Python UNIX和Linux系統管理指南》,讀者可以學習如何用Python開發自己的一套命令行工具來解決諸多問題。
作者建立了一個免費下載的Ubuntu虛擬機,其中包含《Python UNIX和Linux系統管理指南》的源代碼和運行實例,也包括SNMP、IPython、SQLAlchemy及其他工具。通過《Python UNIX和Linux系統管理指南》,你可以發現Python在如下幾個方面的作用:
讀取文本文件並提取信息。
使用多線程和fork選項。
使用網路設備從一個進程獲取另一個進程的信息。
創建可點擊的、易於交互的GUl工具。
通過互動式SNMP編程實現監控大型主機集群。
掌握IPython shell,作為Bash、Korn或Z—Shell的替換或補充。
將雲計算整合到基礎設施中,編寫Google App引擎的應用程序。
通過定製腳本解決獨特數據備份的難題。
使用Djan90、SQLAlchemy和Storm ORM與資料庫進行交互。
通過《Python UNIX和Linux系統管理指南》及其補充的虛擬機,你可以了解如何打包並部署Python應用程序和庫,以及編寫代碼在類似的多個UNIXfH Linux平台上運行。
⑸ linux 終端 運行 python
Linux終端中的操作均是使用命令行來進行的。因此,對於小白來說,熟記幾個基本的命令行和使用方法能夠較快的在Linux命令行環境中將python用起來。
打開命令行窗口
打開命令行窗口的快捷鍵如下:
Ctrl + Alt + t
關閉名命令行窗口
關閉命令行窗口的快捷鍵如下:
Ctrl + d
進入python環境
在命令行中直接輸入python即進入了python的編輯環境。進入環境後最明顯的提示是:游標由~$變成>>>。
退出python環境
使用ctrl +d的方式退出python環境。回到命令行環境。
在python環境中輸入多行函數
在python環境中,回車是輸入結束並執行語句。在輸入多行函數的情況下,輸入一行後回車則直接運行了某句代碼而不是整個函數塊。因此,需要能夠換行但不結束輸入的方法。
在語句的末尾輸入英文的;\即可實現換行。
例如:
?
1
2
3
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1);\
return tf.Variable(initial);\
注意:輸入函數塊時注意縮進,否者會報出IndentationError: unexpected indent python錯誤。
non-ascii character xe5 in file解決方法
原因:程序中的編碼錯誤,python默認支持acii模式,但不支持utf8,因此,程序中的中文注釋會引發Error。
解決方法:源代碼文件第一行添加#coding:utf-8即可避免。
退出python環境
使用ctrl +d的方式退出python環境。回到命令行環境。
在python環境中輸入多行函數
在python環境中,回車是輸入結束並執行語句。在輸入多行函數的情況下,輸入一行後回車則直接運行了某句代碼而不是整個函數塊。因此,需要能夠換行但不結束輸入的方法。
在語句的末尾輸入英文的;\即可實現換行。
例如:
?
1
2
3
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1);\
return tf.Variable(initial);\
注意:輸入函數塊時注意縮進,否者會報出IndentationError: unexpected indent python錯誤。
non-ascii character xe5 in file解決方法
原因:程序中的編碼錯誤,python默認支持acii模式,但不支持utf8,因此,程序中的中文注釋會引發Error。
解決方法:源代碼文件第一行添加#coding:utf-8即可避免。