代码
#!/usr/bin/python
import os
import sys
import ntpath
import subprocess
srcPaths = sys.argv[1]
actionType = sys.argv[2]
srcPaths = srcPaths.split("\t")
srcPathsCount = len(srcPaths)
lockCount = unlockCount = 0
def fileIsLocked(srcPath):
cmd1 = subprocess.Popen(["ls", "-ldO", srcPath], stdout=subprocess.PIPE)
cmd2 = subprocess.Popen(["awk", "{ print $5 }"], stdin=cmd1.stdout, stdout=subprocess.PIPE)
cmd1.stdout.close()
if "uchg" in cmd2.communicate()[0]:
return True
else:
return False
def setLock(flagStr, srcPath):
global lockCount, unlockCount
subprocess.call(["chflags", flagStr, srcPath])
if flagStr == "uchg":
lockCount += 1
else:
unlockCount += 1
for srcPath in srcPaths:
if actionType == "Lock":
if not fileIsLocked(srcPath):
setLock("uchg", srcPath)
elif actionType == "Unlock":
if fileIsLocked(srcPath):
setLock("nouchg", srcPath)
else:
if fileIsLocked(srcPath):
setLock("nouchg", srcPath)
else:
setLock("uchg", srcPath)
sys.stdout.write("{}/{}/{}".format(lockCount, unlockCount, srcPathsCount))
该代码将 srcPaths
和 actionType
作为参数 . 前者是带有制表符分隔文件路径的字符串,而后者是一个字符串,其值可以是"Lock","Unlock"和"Toggle",由用户选择 .
函数 fileIsLocked(srcPath)
检查文件是否被锁定 . 它通过使用 ls -ldO
和 awk
来获取文件标志 . 如果它在那里找到 "uchg"
,那么该函数返回 True
,反之亦然 . 函数 setLock(flagStr, srcPath)
执行shell脚本命令以根据条件锁定/解锁文件,并保持已锁定和解锁的文件的计数 .
当然,如果用户想要锁定文件,则将检查文件路径是否已解锁,并将继续锁定已解锁的文件路径 . 如果文件要解锁,反之亦然 . 如果用户想要切换,那么如果文件被锁定,它们将被解锁,反之亦然 .
我不确定代码是否像它需要的那样简洁 . 在我看来,代码可能会缩短,或者函数可能会连接在一起 . 但我无法修改代码并仍然按预期工作 .
您认为可以做些什么来改进代码的逻辑?