如何改进这段代码的逻辑?

2024-09-28 05:37:57 发布

您现在位置:Python中文网/ 问答频道 /正文

代码

#!/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))

代码采用srcPathsactionType作为参数。前者是一个带有制表符分隔的文件路径的字符串,而后者是一个可能具有“Lock”、“Unlock”和“Toggle”值的字符串,这些值由用户选择。你知道吗

函数fileIsLocked(srcPath)检查文件是否被锁定。它通过使用ls -ldOawk获取文件标志来实现这一点。如果在那里找到"uchg",则函数返回True,反之亦然。函数setLock(flagStr, srcPath)执行shell脚本命令,根据条件锁定/解锁文件,并记录已锁定和解锁的文件数。你知道吗

当然,如果用户想要锁定文件,文件路径将被检查为未锁定,并继续锁定那些未锁定的文件。如果要解锁文件,反之亦然。如果用户想要切换,那么如果文件被锁定,它们就会被解锁,反之亦然。你知道吗

我不确定代码是否足够简洁。在我看来,代码可能会被缩短,或者函数可能会连接在一起。但我无法修改代码并使其继续按预期工作。你知道吗

你认为可以做些什么来改进代码的逻辑?你知道吗


Tags: 文件代码importifstdoutsyssubprocesssrcpath

热门问题