Ich habe das Programm noch etwas sicherer gemacht. Das Hauptproblem ist das Timing. Wenn das stimmt, dann kann man auch überall hin speichern. Neu wird die Antwort untersucht und damit sollte es eigentlich funktionieren. Ausserdem wird ausgedruckt was gerade passiert.
Python
import socket, time, os, sys, re
HOST = "127.0.0.1"
PORT = 3292
class CdcClient:
"""
A class to communicate with Cdc
"""
def __init__(self, host, port):
self.host = host
self.port = port
def connectCDC(self):
self.handle = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.handle.connect((self.host, self.port))
def sendCmd(self, cmd):
print 'sending: ',cmd
self.handle.send(cmd+'\r\n')
response = ''
while not (response.find('OK')>=0 or response.find('.\r\n')>=0):
response += self.handle.recv(1024)
time.sleep(0.1)
print 'response: ',response
return response
def close(self):
self.handle.close()
def printHtmlPage(self, search):
searchName = search.replace(' ','_')
htmlFile = open('%s.html' % searchName, 'w')
result = self.sendCmd("selectchart details")
if result.startswith('Not found'):
self.sendCmd('newchart details')
self.sendCmd("selectchart details")
self.sendCmd("setfov 3.0")
self.sendCmd("resize 400 300")
self.sendCmd("setproj EQUAT")
self.sendCmd('search "%s"' % search)
result = self.sendCmd('getmsgbox')
resultText = re.sub(r' ([a-zA-Z]*:)', '<br/>\\1', result[3:])
self.sendCmd('saveimg png %s' % os.path.join(os.getcwd(),
'%s_1.png' % searchName))
result = self.sendCmd("selectchart overview")
if result.startswith('Not found'):
self.sendCmd('newchart overview')
self.sendCmd("selectchart overview")
self.sendCmd("setfov 70.0")
self.sendCmd("resize 400 300")
self.sendCmd('saveimg png %s' % os.path.join(os.getcwd(),
'%s_2.png' % searchName))
time.sleep(1)
htmlString ='''
<html>
<body>
<table>
<tr><th colspan="2">%s</th></tr>
<tr><td colspan="2">%s</td></tr>
<tr>
<td><img src=%s_1.png></img></td>
<td><img src=%s_2.png></img></td>
</tr>
</table>
</body>
</html>
''' % (search, resultText, searchName, searchName)
htmlFile.write(htmlString)
htmlFile.close()
if __name__ == "__main__":
search = ' '.join(sys.argv[1:])
client = CdcClient(HOST, PORT)
client.connectCDC()
client.printHtmlPage(search)
client.close()
os.system('%s.html' % search.replace(' ','_'))
Alles anzeigen
Viel Spass
Benny