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
如果您真的需要多线程,或者此代码段是否有任何问题,请告诉我。
我正在构建一个脚本,用于在 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
如果您真的需要多线程,或者此代码段是否有任何问题,请告诉我。