1 #!/usr/bin/env python |
1 #!/usr/bin/env python |
2 import sys |
2 import sys |
|
3 import signal |
3 import xmlrpclib |
4 import xmlrpclib |
4 import time |
5 import time |
5 import re |
6 import re |
6 |
7 |
7 # Neos server config |
8 # Neos server config |
8 NEOS_HOST="neos.mcs.anl.gov" |
9 NEOS_HOST="neos.mcs.anl.gov" |
9 NEOS_PORT=3332 |
10 NEOS_PORT=3332 |
10 |
11 |
11 if len(sys.argv) < 3 or len(sys.argv) > 3: |
12 jobNumber = 0 |
12 sys.stderr.write("Usage: NeosCSDPClient <input_filename> <output_filename>\n") |
13 password = "" |
13 sys.exit(1) |
14 neos = None |
|
15 inputfile = None |
|
16 outputfile = None |
|
17 # interrupt handler |
|
18 def cleanup(signal, frame): |
|
19 sys.stdout.write("Caught interrupt, cleaning up\n") |
|
20 if jobNumber != 0: |
|
21 neos.killJob(jobNumber, password) |
|
22 if inputfile != None: |
|
23 inputfile.close() |
|
24 if outputfile != None: |
|
25 outputfile.close() |
|
26 sys.exit(21) |
|
27 |
|
28 signal.signal(signal.SIGHUP, cleanup) |
|
29 signal.signal(signal.SIGINT, cleanup) |
|
30 signal.signal(signal.SIGQUIT, cleanup) |
|
31 signal.signal(signal.SIGTERM, cleanup) |
|
32 |
|
33 if len(sys.argv) <> 3: |
|
34 sys.stderr.write("Usage: neos_csdp_client <input_filename> <output_filename>\n") |
|
35 sys.exit(19) |
14 |
36 |
15 neos=xmlrpclib.Server("http://%s:%d" % (NEOS_HOST, NEOS_PORT)) |
37 neos=xmlrpclib.Server("http://%s:%d" % (NEOS_HOST, NEOS_PORT)) |
16 |
38 |
17 inputfile = open(sys.argv[1],"r") |
|
18 xml_pre = "<document>\n<category>sdp</category>\n<solver>csdp</solver>\n<inputMethod>SPARSE_SDPA</inputMethod>\n<dat><![CDATA[" |
39 xml_pre = "<document>\n<category>sdp</category>\n<solver>csdp</solver>\n<inputMethod>SPARSE_SDPA</inputMethod>\n<dat><![CDATA[" |
19 xml_post = "]]></dat>\n</document>\n" |
40 xml_post = "]]></dat>\n</document>\n" |
20 xml = xml_pre |
41 xml = xml_pre |
|
42 inputfile = open(sys.argv[1],"r") |
21 buffer = 1 |
43 buffer = 1 |
22 while buffer: |
44 while buffer: |
23 buffer = inputfile.read() |
45 buffer = inputfile.read() |
24 xml += buffer |
46 xml += buffer |
25 inputfile.close() |
47 inputfile.close() |
48 sys.stdout.write(msg) |
70 sys.stdout.write(msg) |
49 |
71 |
50 # extract solution |
72 # extract solution |
51 result = msg.split("Solution:") |
73 result = msg.split("Solution:") |
52 if len(result) > 1: |
74 if len(result) > 1: |
53 output = open(sys.argv[2],"w") |
75 solution = result[1].strip() |
54 output.write(result[1].strip()) |
76 if solution != "": |
55 output.close() |
77 output = open(sys.argv[2],"w") |
|
78 output.write(solution) |
|
79 output.close() |
56 |
80 |
57 # extract return code |
81 # extract return code |
58 p = re.compile(r"^Error: Command exited with non-zero status (\d+)$", re.MULTILINE) |
82 p = re.compile(r"^Error: Command exited with non-zero status (\d+)$", re.MULTILINE) |
59 m = p.search(messages) |
83 m = p.search(messages) |
60 if m: |
84 if m: |
61 sys.exit(int(m.group(1))) |
85 sys.exit(int(m.group(1))) |
62 else: |
86 else: |
63 sys.exit(0) |
87 sys.exit(0) |
64 |
88 |
65 |
|