while 循环中的 open 语句有问题
something wrong with with open statement which is in while loop
我删掉了一部分我试图完成的脚本。我期待每次迭代后 mylineS.split()[0]
的新结果。 outS.txt
和 outT.txt
是每次迭代 commandC
的结果,每次迭代的结果都不同。但是 mylineS.split()[0]
为每次迭代带来第一个结果。
我猜我的方法有问题,知道吗?
B = 0
while B < len(Source_Tdevs):
devS = Source_Tdevs[B]
devT = Target_Tdevs[B]
subprocess.run(commandC, shell=True)
print (devS)
with open('outS.txt', 'r') as gS:
CS = len(gS.readlines())
mylineS = linecache.getline('outS.txt', CS -1)
Source_Tdevs_SGs.append(mylineS.split()[0])
**print (mylineS.split()[0])**
gS.close()
with open('outT.txt', 'r') as gT:
CT = len(gT.readlines())
mylineT = linecache.getline('outT.txt', CT - 1)
Target_Tdevs_SGs.append(mylineT.split()[0])
gT.close()
subprocess.run('del outS.txt, outT.txt', shell=True)
B= B + 1
commandC 在subprocess.run(commandC, shell=True)
的上方一行。我在写底部。
commandC = 'set "SYMCLI_OFFLINE=1" & set "SYMCLI_DB_FILE=C:\PROGRAM FILES\EMC\SYMAPI\DB\SYMAPI_DB.BIN" & call symaccess -sid %s list -type storage -dev %s > outS.txt & call symaccess -sid %s list -type storage -dev %s > outT.txt' % (
sid, devS, sid, devT)
您滥用 linecache
模块。 linecache 用于从 Python source code:
获取 source code lines
The linecache module allows one to get any line from a Python source file, while attempting to optimize internally, using a cache, the common case where many lines are read from a single file. This is used by the traceback module to retrieve source lines for inclusion in the formatted traceback.
正如文本所暗示的那样,该模块还将在内存中保留文件的内容,因此仅在第一个 运行 时给出正确的输出。一个简单的补救方法是使用
使缓存无效
linecache.checkcache('outS.txt')
虽然更好的做法是 完全不 使用 linecache(这不是为了这个,毕竟你的文件在不断变化);相反,只需阅读使用 .readlines()
中的所有行并使用 [-1]
提取最后一行,例如:
lines = gS.readlines()
last_line = lines[-1]
我删掉了一部分我试图完成的脚本。我期待每次迭代后 mylineS.split()[0]
的新结果。 outS.txt
和 outT.txt
是每次迭代 commandC
的结果,每次迭代的结果都不同。但是 mylineS.split()[0]
为每次迭代带来第一个结果。
我猜我的方法有问题,知道吗?
B = 0
while B < len(Source_Tdevs):
devS = Source_Tdevs[B]
devT = Target_Tdevs[B]
subprocess.run(commandC, shell=True)
print (devS)
with open('outS.txt', 'r') as gS:
CS = len(gS.readlines())
mylineS = linecache.getline('outS.txt', CS -1)
Source_Tdevs_SGs.append(mylineS.split()[0])
**print (mylineS.split()[0])**
gS.close()
with open('outT.txt', 'r') as gT:
CT = len(gT.readlines())
mylineT = linecache.getline('outT.txt', CT - 1)
Target_Tdevs_SGs.append(mylineT.split()[0])
gT.close()
subprocess.run('del outS.txt, outT.txt', shell=True)
B= B + 1
commandC 在subprocess.run(commandC, shell=True)
的上方一行。我在写底部。
commandC = 'set "SYMCLI_OFFLINE=1" & set "SYMCLI_DB_FILE=C:\PROGRAM FILES\EMC\SYMAPI\DB\SYMAPI_DB.BIN" & call symaccess -sid %s list -type storage -dev %s > outS.txt & call symaccess -sid %s list -type storage -dev %s > outT.txt' % (
sid, devS, sid, devT)
您滥用 linecache
模块。 linecache 用于从 Python source code:
The linecache module allows one to get any line from a Python source file, while attempting to optimize internally, using a cache, the common case where many lines are read from a single file. This is used by the traceback module to retrieve source lines for inclusion in the formatted traceback.
正如文本所暗示的那样,该模块还将在内存中保留文件的内容,因此仅在第一个 运行 时给出正确的输出。一个简单的补救方法是使用
使缓存无效linecache.checkcache('outS.txt')
虽然更好的做法是 完全不 使用 linecache(这不是为了这个,毕竟你的文件在不断变化);相反,只需阅读使用 .readlines()
中的所有行并使用 [-1]
提取最后一行,例如:
lines = gS.readlines()
last_line = lines[-1]