我正在尝试在Python 3.6中编写一个函数,以获取LVM的列表,它们的卷组和Linux计算机中的大小。 这是我写的代码
def get_attribute():
command = subprocess.Popen("lvs --rows", shell=True, stdout=subprocess.PIPE)
for line in command.stdout:
line_cod = line.decode("utf-8")
if "LV" in line_cod:
lvm_list = (line_cod.split()[1:])
elif "VG" in line_cod:
vg_list = line_cod.split()[1:]
elif "LSize"in line_cod:
size_list = line_cod.split()[1:]
lvdata = zip(lvm_list, vg_list, size_list)
return lvdata
这将返回一个可迭代的循环,我可以循环使用一个具有LVM名称,VolumeGroup和Size的元组。
尽管这很好用,但是在zip
之后的Pycharm上,我对lvm_list
和vg_list
变量:local variable "lvm_list/vg_list might be referenced before assignment
发出了警告。
在网络上搜索时,我知道此错误与变量范围有关,但我知道if
语句未在Python中定义范围。
我在做什么错了?
答案 0 :(得分:-1)
当且仅当始终有两行,其中一行包含import com.company.pipeline.providers.BuildLogProvider
class PublishBuildLog {
BuildLogProvider buildLogProvider = new BuildLogProvider()
void setBuildLogProvider(BuildLogProvider buildLogProvider) {
this.buildLogProvider = buildLogProvider
}
def call(def jobName, def buildNumber) {
def contents = buildLogProvider.getBuildLog(jobName, buildNumber)
writeFile(file: "filename", text: contents)
}
}
数据,另一行包含LV
数据,而行VG
之前,您的解决方案才有效。可能是这种情况,但是linter不知道这件事,它看到的只是LSize
构造中的情况导致读取两个变量if
和lvm_list
在分配它们之前。
如果您确定vg_list
行总是排在其他两行之后,则可以在循环之前使用任何值初始化变量,并且linter会停止抱怨:
LSize