写入不适用于Python的文件

时间:2018-03-06 18:29:35

标签: python file-writing

我在写入文本文件时遇到问题。第一个文件被创建但没有写入的文本。这是我的代码:

def write2file(self):
    generate_file = ['SHIFT_TRAFFIC_OFF','REMOVE_ADD_BUNDLE','SHIFT_TRAFFIC_ON']
    for method in generate_file:
        f = open("/home/superloop/10gto100g/test/%s_%s" % (self.hostname,method), "w")
        output = getattr(self,method)
  #     self.SHIFT_TRAFFIC_OFF()
        f.write(output())
        f.close()

def SHIFT_TRAFFIC_OFF(self):
    print "router ospf 1"
    print " area 0"
    print "     interface Bundle-Ether%s" % self.bundle
    print "         cost 100"
    print "!"
    print "router ospfv3 1"
    print " area 0"
    print "     interface Bundle-Ether%s" % self.bundle
    print "         cost 100"

这是执行应用程序时的输出:

router ospf 1
 area 0
     interface Bundle-Ether4
         cost 100
!
router ospfv3 1
 area 0
     interface Bundle-Ether4
         cost 100
Traceback (most recent call last):
  File "main.py", line 42, in <module>
    main()
  File "main.py", line 20, in main
    parse_engine(database)
  File "/home/superloop/10gto100g/parser.py", line 15, in parse_engine
    device = BaseDevice(list[0],list[1],list[2],list[3],list[4])
  File "/home/superloop/10gto100g/objects/basedevice.py", line 12, in __init__
    self.write2file()
  File "/home/superloop/10gto100g/objects/basedevice.py", line 20, in write2file
    f.write(output())
TypeError: expected a character buffer object

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

你的函数没有返回任何值;因此,正如凯文所说,它相当于调用f.write(无)。

关于您的意见,您可以执行以下操作......

import sys
sys.stdout = open({FILENAME}, "w")
print ("this will be written to the file")

这会将stdout重定向到您的文件,请确保通过调用

重置它

sys.stdout = sys.__stdout__

完成你正在做的任何事情之后

。我相当肯定这会解决问题,但我还没有对其进行测试。

同样,看起来您使用的是旧版本的Python,因此您可能必须使用稍微不同的方法。有关详细信息,请参阅this post