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

问题描述 投票:0回答:1

我正在构建用于在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 +”)作为diskFile:

我已经尝试过选项“ r”,“ r +”,“ a +”

我已经运行脚本sudo

感谢您的任何帮助

请保存我我要吃坚果

python-3.x linux file readlines
1个回答
0
投票

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

让我知道您是否真的需要多个线程,或者此代码段是否有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.