在下面的程序中,我創建了窗口輸出。我想將輸出重定向到文件。但我無法將window.inch(y,x)
輸出寫入文件。無法在python中編寫window.inch(y,x)輸出到文件
#! /usr/bin/python2.6
import sys, getopt
import curses
from curses import wrapper
def call(stdscr):
inputFile = ''
try:
opts, args = getopt.getopt(sys.argv[1:],"hi:o:",["ifile=","ofile="])
except getopt.GetoptError:
print 'my_box.py -i <inputFile_With_Path>'
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print 'my_box.py -i <inputFile_With_Path>'
sys.exit()
elif opt == '-i':
inputFile = arg
output_file = open("/home/vparamasivam/Training/Python/output.txt", "w+")
my_Dict = { }
cur_y = 3
cur_sbc = 30
cur_EP1 = 10
cur_uas = 50
cur_UAC = 10
sbc_cur = 24
cur_poi = 2
RED_TEXT = 1
endPointCount = 0
callCount = 0
count = 0
if not curses.has_colors():
curses.endwin()
print "no colors"
sys.exit()
else:
curses.start_color()
curses.init_pair(RED_TEXT, curses.COLOR_RED, curses.COLOR_BLACK)
window = curses.newwin(500, 500, 0, 0)
window.box()
fo = open(inputFile, "r");
print "Name of the file :", fo.name
print "File closed or not :", fo.closed
window.addstr(1, 29, "SBC", curses.color_pair(RED_TEXT))
window.vline(cur_y, cur_sbc, '|', 500)
for line in fo:
if (line.find("Receive Msg From:") != -1) :
ip, l, p, s, msg = line.split(',')
ipc, ip = ip.rsplit(' ',1)
ip, port = ip.split('/')
ipPort = ip + ':' + port
s, msg, req_uri = msg.split(' ', 2)
print "\n SIP message : ", msg, ' '
print "Received from IP : ", ipPort, ' '
callCount += 1
if not my_Dict.has_key(ipPort):
endPointCount +=1
if endPointCount == 1:
window.addstr(1, 4, ipPort, curses.color_pair(RED_TEXT))
window.vline(cur_y, cur_EP1, '|', 500)
new = {ipPort:cur_EP1}
my_Dict.update(new)
cur_EP1 += 7
cur_poi += 1
window.addstr(cur_poi, cur_EP1, msg, curses.color_pair(RED_TEXT))
cur_poi += 1
cur_EP1 -= 6
window.hline(cur_poi, cur_EP1, '-', 18)
cur_EP1 += 18
window.addstr(cur_poi, cur_EP1, '>')
else :
sbc_cur +=20
if endPointCount != 2:
cur_uas +=20
window.addstr(1, sbc_cur, ipPort, curses.color_pair(RED_TEXT))
window.vline(cur_y, cur_uas, '|', 500)
new = {ipPort:cur_uas}
my_Dict.update(new)
cur_poi +=2
cur_uas -=13
window.addstr(cur_poi, cur_uas, msg, curses.color_pair(RED_TEXT))
cur_uas +=13
cur_poi +=1
cur_sbc +=1
window.addstr(cur_poi, cur_sbc, '<')
count = cur_uas - cur_sbc - 1
cur_sbc +=1
window.hline(cur_poi, cur_sbc, '-', count)
cur_sbc -=2
else :
ep = my_Dict[ipPort]
if ep == cur_UAC :
ep += 7
window.addstr(cur_poi, ep, msg, curses.color_pair(RED_TEXT))
cur_poi += 1
ep -= 6
window.hline(cur_poi, ep, '-', 18)
ep += 18
window.addstr(cur_poi, ep, '>')
cur_poi += 1
else :
cur_poi +=1
ep -=13
window.addstr(cur_poi, ep, msg, curses.color_pair(RED_TEXT))
ep +=13
cur_poi +=1
cur_sbc +=1
window.addstr(cur_poi, cur_sbc, '<')
count = ep - cur_sbc - 1
cur_sbc +=1
window.hline(cur_poi, cur_sbc, '-', count)
cur_sbc -=2
elif (line.find("Send Msg to:") != -1) :
ip, l, p, s, msg = line.split(',')
s, msg, status = msg.split(' ', 2)
ipc, ip = ip.rsplit(' ',1)
ip, port = ip.split('/')
ipPort = ip + ':' + port
print "\n SIP message : ", msg, ' '
print "Sent to IP : ", ipPort, ' '
callCount += 1
if not my_Dict.has_key(ipPort):
endPointCount +=1
if endPointCount == 1:
window.addstr(1, 9, ipPort, curses.color_pair(RED_TEXT))
window.vline(cur_y, cur_EP1, '|', 500)
new = {ipPort:cur_EP1}
my_Dict.update(new)
cur_poi +=1
cur_EP1 +=7
window.addstr(cur_poi, cur_EP1, msg, curses.color_pair(RED_TEXT))
cur_poi +=1
cur_EP1 -=6
window.addstr(cur_poi, cur_EP1, '<')
cur_EP1 +=1
window.hline(cur_poi, cur_EP1, '-', 18)
else :
sbc_cur +=20
if endPointCount != 2:
cur_uas +=20
window.addstr(1, sbc_cur, ipPort, curses.color_pair(RED_TEXT))
window.vline(cur_y, cur_uas, '|', 500)
new = {ipPort:cur_uas}
my_Dict.update(new)
cur_poi +=1
cur_uas -=13
window.addstr(cur_poi, cur_uas, msg, curses.color_pair(RED_TEXT))
cur_uas +=13
cur_poi +=1
cur_sbc +=1
count = cur_uas - cur_sbc - 1
window.hline(cur_poi, cur_sbc, '-', count)
cur_uas -=1
window.addstr(cur_poi, cur_uas, '>')
cur_uas +=1
cur_sbc -=1
else :
ep = my_Dict[ipPort]
if ep == cur_UAC :
cur_poi +=1
ep +=7
window.addstr(cur_poi, ep, msg, curses.color_pair(RED_TEXT))
cur_poi += 1
ep -= 6
window.addstr(cur_poi, ep, '<')
ep +=1
window.hline(cur_poi, ep, '-', 18)
cur_poi += 1
else :
cur_poi +=1
ep -=13
window.addstr(cur_poi, ep, msg, curses.color_pair(RED_TEXT))
ep +=13
cur_poi +=1
cur_sbc +=1
count = ep - cur_sbc - 1
window.hline(cur_poi, cur_sbc, '-', count)
ep -=1
window.addstr(cur_poi, ep, '>')
cur_sbc -=1
print ""
for y in range(0,500):
for x in range(0,500):
inchar = window.inch(y,x)
output_file.write(inchar)
#curses.scr_dump(output_file)
inchar = window.getch()
output_file.close()
fo.close()
def main(stdscr):
call(stdscr)
wrapper(main)
獲得以下錯誤,
TypeError: argument 1 must be string or read-only character buffer, not int
@ inchar = window.getch()
請幫我在這方面。
@ThomasDickey請看看 –
錯誤@ output_file.write(inchar)不是i n inchar = window.getch() –