我正在构建用于在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
感谢您的任何帮助
请保存我我要吃坚果
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
让我知道您是否真的需要多个线程,或者此代码段是否有任何问题。