pythonwindows文件鎖
Ⅰ 使用python寫文件時,如何做到寫入文件由於外力刪掉了之後可以新創建一個同名文件並繼續寫入
你的試驗很詳細。不過這個現象在linux下可能與windows下不一樣。 通常改名或者是刪除後文件就失效了。寫入操作也是無效的。
為了防止別人修改你的文件,通常在寫入時,會加上一個鎖。使用操作系統特有的open方法才可以加鎖。
可以使用portalocker,filelock 也可以使用posixfile,
os.open能不能成呢?按理可以。不過C語言里使用fopen沒有這個功能,不過使用fcntl里的open可以。
你加了鎖後,別人就不能寫。文件處於佔用狀態。
另外操作系統都有一種文件監控機制的消息通知。具體忘記了。在unix與windows都有這個功能。當別人程序修改了某個文件,你會立刻得到消息通知。
補充一些教程。os.open還是可以用的。
os.open(file, flags[, mode]);
Parameters
file -- File name to be opened.
flags -- This is the following constants are options for the flags. They can be combined using the bitwise OR operator |. Some of them are not available on all platforms.
os.O_RDONLY: open for reading only
os.O_WRONLY: open for writing only
os.O_RDWR : open for reading and writing
os.O_NONBLOCK: do not block on open
os.O_APPEND: append on each write
os.O_CREAT: create file if it does not exist
os.O_TRUNC: truncate size to 0
os.O_EXCL: error if create and file exists
os.O_SHLOCK: atomically obtain a shared lock
os.O_EXLOCK: atomically obtain an exclusive lock
os.O_DIRECT: eliminate or rece cache effects
os.O_FSYNC : synchronous writes
os.O_NOFOLLOW: do not follow symlinks
mode -- This work in similar way as it works for chmod() method.
對Python加密時可能會有兩種形式,一種是對Python轉成的exe進行保護,另一種是直接對.py或者.pyc文件進行保護,下面將列舉兩種形式的保護流程。
1、對python轉exe加殼
下載最新版VirboxProtector加殼工具,使用加殼工具直接對demo.exe進行加殼操作
2、對.py/.pyc加密
第一步,使用加殼工具對python安裝目錄下的python.exe進行加殼,將python.exe拖入到加殼工具VirboxProtector中,配置後直接點擊加殼。
第二步,對.py/.pyc進行加密,使用DSProtector對.py/.pyc進行保護。
安全技術:
l虛擬機外殼:精銳5的外殼保護工具,創新性的引入了預分析和自動優化引擎,有效的解決了虛擬化保護代碼時的安全性和性能平衡問題。
l碎片代碼執行:利用自身成熟的外殼中的代碼提取技術,抽取大量、大段代碼,加密混淆後在安全環境中執行,最大程度上減少加密鎖底層技術和功能的依賴,同時大量大段地移植又保證了更高的安全性。
lVirbox加密編譯引擎:集編譯、混淆等安全功能於一身,由於在編譯階段介入,可優化空間是普遍虛擬化技術無法比擬的,對代碼、變數的混淆程度也有了根本的提升。
l反黑引擎:內置R0級核心態反黑引擎,基於黑客行為特徵 的(反黑資料庫)反制手段。精準打擊調試、注入、內存修改等黑客行為,由被動挨打到主動防護。
加密效果:
加密之前
以pyinstall 的打包方式為例,使用pyinstxtractor.py文件對log_322.exe進行反編譯,執行後會生成log_322.exe_extracted文件夾,文件夾內會生成pyc文件。
成功之後會在同目錄下生成一個文件夾
Ⅲ PYTHON(3)用賬號密碼登錄windows共享文件夾
在工作的時候遇到需要通過賬號密碼訪問window平台的samba文件的情況,因為伺服器沒有開放許可權給everyone,頭疼。 網路,stackoverflow基本找不到解決方法,或者字太多,哈哈哈。 最後只好深挖範例 比如下圖 如果發現共享許可權已經開了修改,但是任然報錯 unable to open file 並且系統是windows系統,可以查看一下本地許可權是否也開了。 如果執行下來沒有報錯,那麼就恭喜成功了。 查了半天 官方手冊 總算搞定了。Ⅳ python如何獲取windows文件屬性的詳細信息
#已知文件名的情況下,可以用這個函數
def getFileInfo(filepath):
info = {}
if os.path.isfile(filepath):
info['TimeCreated'] = os.path.getctime(filepath)
info['TimeModified'] = os.path.getatime(filepath)
info['Size'] = os.path.getsize(filepath)
return info
Ⅳ Python中的鎖都具有哪些
大致羅列一下:
一、全局解釋器鎖(GIL)
1、什麼是全局解釋器鎖
每個CPU在同一時間只能執行一個線程,那麼其他的線程就必須等待該線程的全局解釋器,使用權消失後才能使用全局解釋器,即使多個線程直接不會相互影響在同一個進程下也只有一個線程使用cpu,這樣的機制稱為全局解釋器鎖(GIL)。GIL的設計簡化了CPython的實現,使的對象模型包括關鍵的內建類型,如:字典等,都是隱含的,可以並發訪問的,鎖住全局解釋器使得比較容易的實現對多線程的支持,但也損失了多處理器主機的並行計算能力。
2、全局解釋器鎖的好處
1)、避免了大量的加鎖解鎖的好處
2)、使數據更加安全,解決多線程間的數據完整性和狀態同步
3、全局解釋器的缺點
多核處理器退化成單核處理器,只能並發不能並行。
4、GIL的作用:
多線程情況下必須存在資源的競爭,GIL是為了保證在解釋器級別的線程唯一使用共享資源(cpu)。
二、同步鎖
1、什麼是同步鎖?
同一時刻的一個進程下的一個線程只能使用一個cpu,要確保這個線程下的程序在一段時間內被cpu執,那麼就要用到同步鎖。
2、為什麼用同步鎖?
因為有可能當一個線程在使用cpu時,該線程下的程序可能會遇到io操作,那麼cpu就會切到別的線程上去,這樣就有可能會影響到該程序結果的完整性。
3、怎麼使用同步鎖?
只需要在對公共數據的操作前後加上上鎖和釋放鎖的操作即可。
4、同步鎖的所用:
為了保證解釋器級別下的自己編寫的程序唯一使用共享資源產生了同步鎖。
三、死鎖
1、什麼是死鎖?
指兩個或兩個以上的線程或進程在執行程序的過程中,因爭奪資源或者程序推進順序不當而相互等待的一個現象。
2、死鎖產生的必要條件?
互斥條件、請求和保持條件、不剝奪條件、環路等待條件
3、處理死鎖的基本方法?
預防死鎖、避免死鎖(銀行家演算法)、檢測死鎖(資源分配)、解除死鎖:剝奪資源、撤銷進程
四、遞歸鎖
在Python中為了支持同一個線程中多次請求同一資源,Python提供了可重入鎖。這個RLock內部維護著一個Lock和一個counter變數,counter記錄了acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。遞歸鎖分為可遞歸鎖與非遞歸鎖。
五、樂觀鎖
假設不會發生並發沖突,只在提交操作時檢查是否違反數據完整性。
六、悲觀鎖
假定會發生並發沖突,屏蔽一切可能違反數據完整性的操作。
python常用的加鎖方式:互斥鎖、可重入鎖、迭代死鎖、互相調用死鎖、自旋鎖大致羅列一下:
一、全局解釋器鎖(GIL)
1、什麼是全局解釋器鎖
每個CPU在同一時間只能執行一個線程,那麼其他的線程就必須等待該線程的全局解釋器,使用權消失後才能使用全局解釋器,即使多個線程直接不會相互影響在同一個進程下也只有一個線程使用cpu,這樣的機制稱為全局解釋器鎖(GIL)。GIL的設計簡化了CPython的實現,使的對象模型包括關鍵的內建類型,如:字典等,都是隱含的,可以並發訪問的,鎖住全局解釋器使得比較容易的實現對多線程的支持,但也損失了多處理器主機的並行計算能力。
2、全局解釋器鎖的好處
1)、避免了大量的加鎖解鎖的好處
2)、使數據更加安全,解決多線程間的數據完整性和狀態同步
3、全局解釋器的缺點
多核處理器退化成單核處理器,只能並發不能並行。
4、GIL的作用:
多線程情況下必須存在資源的競爭,GIL是為了保證在解釋器級別的線程唯一使用共享資源(cpu)。
二、同步鎖
1、什麼是同步鎖?
同一時刻的一個進程下的一個線程只能使用一個cpu,要確保這個線程下的程序在一段時間內被cpu執,那麼就要用到同步鎖。
2、為什麼用同步鎖?
因為有可能當一個線程在使用cpu時,該線程下的程序可能會遇到io操作,那麼cpu就會切到別的線程上去,這樣就有可能會影響到該程序結果的完整性。
3、怎麼使用同步鎖?
只需要在對公共數據的操作前後加上上鎖和釋放鎖的操作即可。
4、同步鎖的所用:
為了保證解釋器級別下的自己編寫的程序唯一使用共享資源產生了同步鎖。
三、死鎖
1、什麼是死鎖?
指兩個或兩個以上的線程或進程在執行程序的過程中,因爭奪資源或者程序推進順序不當而相互等待的一個現象。
2、死鎖產生的必要條件?
互斥條件、請求和保持條件、不剝奪條件、環路等待條件
3、處理死鎖的基本方法?
預防死鎖、避免死鎖(銀行家演算法)、檢測死鎖(資源分配)、解除死鎖:剝奪資源、撤銷進程
四、遞歸鎖
在Python中為了支持同一個線程中多次請求同一資源,Python提供了可重入鎖。這個RLock內部維護著一個Lock和一個counter變數,counter記錄了acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。遞歸鎖分為可遞歸鎖與非遞歸鎖。
五、樂觀鎖
假設不會發生並發沖突,只在提交操作時檢查是否違反數據完整性。
六、悲觀鎖
假定會發生並發沖突,屏蔽一切可能違反數據完整性的操作。
python常用的加鎖方式:互斥鎖、可重入鎖、迭代死鎖、互相調用死鎖、自旋鎖
Ⅵ python log 文件鎖判斷是否有鎖
Python的文件鎖目前使用的是fcntl這個庫,它實際上為 Unix上的ioctl,flock和fcntl 函數提供了一個介面。
1.fcntl庫的簡單使用
[python] view plain
import fcntl
import os, time
FILE = "counter.txt"
if not os.path.exists(FILE):
# create the counter file if it doesn't exist
file = open(FILE, "w")
file.write("0")
file.close()
for i in range(20):
file = open(FILE, "r+") #由於flock生成的是勸告鎖,不能阻止進程對文件的操作,所以這里可以正常打開文件
fcntl.flock(file.fileno(), fcntl.LOCK_EX) #為了避免同時操作文件,需要程序自己來檢查該文件是否已經被加鎖。這里如果檢查到加鎖了,進程會被阻塞
print 'acquire lock'
counter = int(file.readline()) + 1
file.seek(0)
file.write(str(counter))
print os.getpid(), "=>", counter
time.sleep(10)
file.close() # unlocks the file
print 'release lock'
time.sleep(3)
分別啟動2個進程來同時運行這個腳本,我們可以很明顯的看到2者互相之間交替阻塞。同一時刻只有一個進程能夠對counter.txt文件進行操作。
2.對fcntl.flock()函數的說明:
linux的flock() 的函數原型如下所示:
int flock(int fd, int operation);
其中,參數 fd 表示文件描述符;參數 operation 指定要進行的鎖操作,該參數的取值有如下幾種:
LOCK_SH:表示要創建一個共享鎖,在任意時間內,一個文件的共享鎖可以被多個進程擁有;
LOCK_EX:表示創建一個排他鎖,在任意時間內,一個文件的排他鎖只能被一個進程擁有;
LOCK_UN:表示刪除該進程創建的鎖;
LOCK_MAND:它主要是用於共享模式強制鎖,它可以與 LOCK_READ 或者 LOCK_WRITE聯合起來使用,從而表示是否允許並發的讀操作或者並發的寫操作;
通常情況下,如果加鎖請求不能被立即滿足,那麼系統調用 flock()會阻塞當前進程。比如,進程想要請求一個排他鎖,但此時,已經由其他進程獲取了這個鎖,那麼該進程將會被阻塞。如果想要在沒有獲得這個排他鎖的情況下不阻塞該進程,可以將LOCK_NB 和 LOCK_SH 或者 LOCK_EX 聯合使用,那麼系統就不會阻塞該進程。flock()所加的鎖會對整個文件起作用。
注意:
1. 對於文件的 close() 操作會使文件鎖失效;
2. 同理,進程結束後文件鎖失效;
3. flock() 的 LOCK_EX是「勸告鎖」,系統內核不會強制檢查鎖的狀態,需要在代碼中進行文件操作的地方顯式檢查才能生效。