1
2
3
4
5
6 """
7 This module allows you to control Simcoal2.
8
9 """
10
11 import os
12 import sys
13 import tempfile
14 from shutil import copyfile
15 from logging import debug
16
19 """Initializes the controller.
20
21 simcoal_dir is the directory where simcoal is.
22
23 The initializer checks for existance and executability of binaries.
24 """
25 self.simcoal_dir = simcoal_dir
26 self.os_name = os.name
27 dir_contents = os.listdir(self.simcoal_dir)
28
29
30 self.bin_name = "simcoal2"
31 if self.bin_name not in dir_contents:
32
33 dir_contents = [x.lower() for x in dir_contents]
34 if self.bin_name not in dir_contents:
35
36 self.bin_name += '.exe'
37 if self.bin_name not in dir_contents:
38 raise IOError("SimCoal not available")
39 if not os.access(os.path.join(self.simcoal_dir, self.bin_name),
40 os.X_OK):
41 raise IOError("SimCoal not executable")
42
43 - def run_simcoal(self, par_file, num_sims, ploydi = '1', par_dir = '.'):
44 """Executes SimCoal.
45 """
46 if par_dir == None:
47 par_dir = os.sep.join([".", 'SimCoal', 'runs'])
48 curr_dir = os.getcwd()
49
50 os.chdir(par_dir)
51 exe = os.path.join(self.simcoal_dir, self.bin_name)
52 if " " in exe:
53 exe = '"' + exe + '"'
54 cmd = exe + ' ' + par_file + ' ' + str(num_sims) + ' ' + ploydi
55
56 if sys.platform=="win32" or self.bin_name.endswith(".exe"):
57
58 cmd += ' > nul 2>nul'
59 else:
60 cmd += ' >/dev/null 2>&1'
61 os.system(cmd)
62 os.chdir(curr_dir)
63