写入不在Python中工作的文件

写入不在Python中工作的文件,python,file-writing,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,m

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

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
路由器ospf 1
区域0
接口束-4
100美元
!
路由器ospfv3 1
区域0
接口束-4
100美元
回溯(最近一次呼叫最后一次):
文件“main.py”,第42行,在
main()
文件“main.py”,第20行,在main中
解析引擎(数据库)
文件“/home/superloop/10gt100g/parser.py”,第15行,在parse_引擎中
设备=基本设备(列表[0]、列表[1]、列表[2]、列表[3]、列表[4])
文件“/home/superloop/10gt100g/objects/basedevice.py”,第12行,在__
self.write2file()文件
文件“/home/superloop/10gt100g/objects/basedevice.py”,第20行,以write2文件的形式
f、 写入(输出())
TypeError:应为字符缓冲区对象

这里发生了什么?

您的函数不返回任何值;因此,正如Kevin所说,这相当于调用f.write(None)

关于你的评论,你可以做以下

import sys
sys.stdout = open({FILENAME}, "w")
print ("this will be written to the file")
这会将标准输出重定向到您的文件,请确保通过调用以下命令将其重置:

sys.stdout=sys.\uu stdout\uuu

在你完成你正在做的事情之后。我相当肯定这会解决问题,但我还没有测试它


另外,看起来您使用的是较旧版本的Python,因此您可能需要使用稍微不同的方法。有关详细信息,请参阅。

f.write(output())
将向文件写入函数返回的内容,而不是函数打印的内容。如果
output
这里是
SHIFT\u TRAFFIC\u OFF
,那么它正试图执行
f.write(None)
,因为
SHIFT\u TRAFFIC\u OFF
不返回任何内容。SHIFT\u TRAFFIC\u OFF函数打印一个字符串,但不返回字符串。您需要返回一个字符串,以便f.write可以将其写入您的文件。更改您的班次以返回“路由器ospf 1…”“我现在明白了…”。。。但是什么才是干净的好方法呢?如果我有一个打印的方法,我如何很好地返回所有字符串?