File.readlines() 不返回任何字符串;可能文件打不开

File.readlines() not returning any strings; possible file not opening

我正在构建一个脚本,用于在 linux 系统上自动配置磁盘。我的一项功能无法正常工作,我终究无法弄清楚原因。

我已经在 pythontutor.com 上测试了代码,没有任何错误。当我 运行 我的机器上的代码时,我没有收到任何错误,但是我得到的不是从文件 "disks.txt" 返回数据的函数,而是空字典。

我尝试在过程中的不同点添加打印语句以查看发生了什么,但没有打印任何内容。

这是我的函数:

def check_for_disks():
    cmd = 'lsblk -l -o name,mountpoint'.split()
    driveDict = {}
    finalDict = {}
    diskFile = open("disks.txt", "w+")
    subprocess.Popen(cmd, stdout=diskFile)
    diskFile.close()
    diskFile = open("disks.txt", "r+")
    for line in diskFile.readlines():
        dictItem = line.split()
        try:
            driveDict[dictItem[0]] = dictItem[1]
        except(IndexError):
            driveDict[dictItem[0]] = "No MountPoint Defined"
    diskFile.close()
    for k, v in driveDict.items():
        if 'sd' in k:
            finalDict[k] = v
        else:
            pass
    return finalDict

这部分工作完美,并创建了我想要的文件,相关信息:

def check_for_disks():
    cmd = 'lsblk -l -o name,mountpoint'.split()
    driveDict = {}
    finalDict = {}
    diskFile = open("disks.txt", "w+")
    subprocess.Popen(cmd, stdout=diskFile)
    diskFile.close()

这部分失败:

diskFile = open("disks.txt", "r+")
for line in diskFile.readlines():

貌似只是打不开文件。我用 ls -la 检查了文件,发现它的权限很好,也就是 -rw-rw-r--

我试过用 open("disks.txt", "a+") as diskFile:

我已经尝试了选项 "r"、"r+"、"a+"

我已经 运行 脚本 sudo

感谢任何帮助

请救救我,我要疯了

TLDR:打开文件时文件为空。

以下命令打开一个新线程,新线程开始写入此文件。

subprocess.Popen(cmd, stdout=diskFile)

但与此同时,随着文件开始创建,您开始读取文件。两个线程使这个命令更快,但我认为你不需要那个。简单地说,等到文件完成后再读取它。

像这样,应该做你想做的事

p = subprocess.Popen(cmd, stdout=diskFile)
p_status = p.wait() #finish writing the file before starting to read it

如果您真的需要多线程,或者此代码段是否有任何问题,请告诉我。