我无法保存此输出,也许有人有解决方案。我列出了一个目录和一些单个文件。但是当我保存输出时只捕获目录文件,而不是单个文件。 我的代码:
import os
tosave = open('/tmp/list','ab')
thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"]
for f in thesource:
print f
for top, dirs, files in os.walk(f):
for nm in files:
print os.path.join(top, nm)
try:
tosave.write(top+nm+'\n')
finally:
tosave.close
我在控制台中看到了所有文件和目录,但在保存的列表中,只是ssh文件。为什么不保存syslog和主机呢?
谢谢!
答案 0 :(得分:1)
您可以尝试在最后添加tosave.flush()
。它确实会引起问题。有时,需要刷新调用以将缓冲区的内容清空到文件中。
答案 1 :(得分:1)
检查这是否适合您
import os
tosave = open('/tmp/list','ab')
thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"]
for f in thesource:
if os.path.isdir(f):
for top, dirs, files in os.walk(f):
for nm in files:
try:
tosave.write(top+nm+'\n')
if os.path.isfile(f):
tosave.write(f+'\n')
to.close()
答案 2 :(得分:1)
如果您在粘贴时错过了()
tosave.close
:(另请选中harsh's answer)
此处finally
错误。 finally
中的代码将在try
块之后执行,因此在首次执行tosave.write(top+nm+'\n')
后,文件将因tosave.close()
而关闭。
您可能打算使用except
:
# snip
try:
tosave.write(top+nm+'\n')
except:
tosave.close()
编辑:要回答您的评论,您希望最后一行与print语句相同:
tosave.write(os.path.join(top, nm) + '\n')
答案 3 :(得分:1)
在你的帮助下,我找到了一个解决方案,它正在发挥作用。我分享了。
tosave = open('/tmp/list','ab')
thesource = ["/etc/ssh","/var/log/syslog","/etc/hosts"]
for f in thesource:
if os.path.isfile(f):
print f
tosave.write(f+'\n')
else:
for top, dirs, files in os.walk(f):
for nm in files:
print os.path.join(top, nm)
tosave.write(top+nm+'\n')
谢谢大家的帮助!!!
答案 4 :(得分:0)
也许这是因为你在追加模式下打开文件('a'
),然后查看它的开头?看看它的结尾 - 你可能会在那里看到你的新文件。
在附加模式下,每次脚本运行时,将其输出附加到文件中。通常你想要的只是写模式('w'
而不是'a'
),它每次都会覆盖文件。
答案 5 :(得分:0)
将close()
放在脚本的末尾。
否则它将在循环的第一步之后关闭文件,使文件不可写。