我在python中使用命令let path = Bundle.main.path(forResource: "myText", ofType: "txt")!
do {
var data = try String(contentsOfFile: path,encoding:.utf8)
mytextview.text = data
}
catch {
print(error)
}
,当我尝试关闭它时出现错误:
os.popen
我该如何解决? 我尝试在另一行中反复阅读它,但这仍然行不通。 这是代码行:
'str' object has no attribute 'close
答案 0 :(得分:3)
此
p = os.popen(command, "r").read()
将p
绑定到.read()
的结果,而不绑定到os.popen()
的结果。您想要:
p = os.popen(command, "r")
r = p.read()
do_something_with(r)
p.close()
或更好:
with os.popen(command, "r") as p:
r = p.read()
# no need to close p anymore, it's already done
请注意,这里不需要列表表达式: f_temp_command.writelines([[r代表r.splitlines()中的l)]
由于r.splitlines()
已返回列表,因此您可以将其替换为:
f_temp_command.writelines(r.splitlines())
或什至:
f_temp_command.write(r)
答案 1 :(得分:0)
由于read
方法返回str
对象,因此无法将其关闭。使用中间变量存储结果。
p = os.popen(command, "r")
res = p.read()
f_temp_command = open("%s/%s%s" % (LOG_DIR, file, LOG_EXT), "w")
f_temp_command.writelines([l for l in res.splitlines()])
p.close()