'str'对象没有属性'使用popen.python关闭

时间:2018-07-02 09:28:06

标签: python

我在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

2 个答案:

答案 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()