import subprocess
f = open("sum.txt","a")
def execute(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
for stdout_line in iter(popen.stdout.readline, ""):
yield stdout_line
popen.stdout.close()
return_code = popen.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
for uses in execute(['ls','-ltr']):
f.write(uses)
print(uses)
答案 0 :(得分:1)
for
循环完成后,您需要在写入文件后关闭文件
for uses in execute(['ls','-ltr']):
f.write(uses)
f.close()
在try
... finally
块中这样做更安全,因为即使对文件执行操作时出错,它也会关闭文件。
try:
f = open("sum.txt","a")
for uses in execute(['ls','-ltr']):
f.write(uses)
finally:
f.close()
或者更好的方法是使用with
语句,因为一旦执行该语句,它将关闭文件
with open("sum.txt","a") as f:
for uses in execute(['ls','-ltr']):
f.write(uses)
答案 1 :(得分:1)
您应该使用上下文管理器打开文件。使用此解决方案,您的文件将被关闭。
代码:
import subprocess
def execute(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
for stdout_line in iter(popen.stdout.readline, ""):
yield stdout_line
popen.stdout.close()
return_code = popen.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
with open("sum.txt", "a") as opened_file:
for uses in execute(['ls', '-ltr']):
opened_file.write(uses)
print(uses)
输出:
>>> python3 test.py
total 96
-rw-rw-r-- 1 milanbalazs users 637 Jul 29 12:30 README.md
drwxrwxr-x 4 milanbalazs users 4096 Jul 29 12:30 admin
-rwxrwxr-x 1 milanbalazs users 1706 Jul 29 12:30 bash_unit_test.sh
sum.txt文件的内容相同。
答案 2 :(得分:0)
为避免此类错误,请在代码中使用with open()
。它将自动关闭文件。