Skip to content
Snippets Groups Projects
Commit 9b38c15c authored by Michael Reuscher's avatar Michael Reuscher
Browse files

SSH multi hosts works fine

parent a584c0b6
No related branches found
No related tags found
1 merge request!4Python driver and data analysis part
......@@ -81,47 +81,48 @@ def create_event_list():
return e_list
def run_sim(e_list, d_path, sim_path, st_path):
def run_sim(e_list, d_path, sim_path, main_path):
stat_path = os.path.join(main_path, "statistics")
os.makedirs(stat_path, mode=0o777, exist_ok=True)
for event in e_list:
folder_name = event[-1]
stat_file_name = "statistics_" + folder_name
output_path = os.path.join(d_path, folder_name)
relativ_path_stat = os.path.join(st_path, stat_file_name + ".dat")
if not args.hosts:
if args.hosts:
# Remote execution on multiple machines with specified user
for host in args.hosts:
ssh_target = f'{args.user}@{host}'
remote_output = make_folders_remote(test_data_path, output_path, ssh_target, host)
event[-1] = remote_output
command = ["ssh", ssh_target, sim_path] + event
result = subprocess.run(command, capture_output=True, text=True)
output = result.stdout
errors = result.stderr
terminal_output(output, errors, result.returncode)
relativ_path_stat = os.path.join(stat_path, stat_file_name + f"_{host}.dat")
with open(relativ_path_stat, "w") as stat_file:
stat_file.write(output)
print(f"{folder_name}_{host} done!")
# Local execution
else:
make_folders_lokal(test_data_path, output_path)
event[-1] = output_path
arguments = event
output, errors, return_code = start_process(sim_path, arguments, test_data_path, output_path)
print(output)
with open(relativ_path_stat, "w") as stat_file:
stat_file.write(output)
print(errors)
if return_code > 0:
print("return code: ", return_code)
print(folder_name + " done!")
def start_process(program_path, arguments, test_path, output_path):
if args.hosts:
# Remote execution on multiple machines with specified user
output = ""
errors = ""
result = ""
for host in args.hosts:
ssh_target = f'{args.user}@{host}'
remote_output = make_folders_remote(test_path, output_path, ssh_target, host)
arguments[-1] = remote_output
command = ["ssh", ssh_target, program_path] + arguments
command = [sim_path] + event
result = subprocess.run(command, capture_output=True, text=True)
output = result.stdout
errors = result.stderr
return output, errors, result.returncode
else:
command = [program_path] + arguments
result = subprocess.run(command, capture_output=True, text=True)
output = result.stdout
errors = result.stderr
return output, errors, result.returncode
terminal_output(output, errors, result.returncode)
relativ_path_stat = os.path.join(stat_path, stat_file_name + ".dat")
with open(relativ_path_stat, "w") as stat_file:
stat_file.write(output)
print(f"{folder_name} done!")
def terminal_output(output, errors, return_code):
print(output)
print(errors)
if return_code > 0:
print("return code: ", return_code)
def make_folders_lokal(test_path, output_path):
......@@ -138,11 +139,12 @@ def make_folders_remote(test_path, output_path, ssh_target, host):
return host_output
def pull_data(remote_path, lokal_path):
for host in args.hosts:
ssh_target = f'{args.user}@{host}'
scp_cmd = f'scp -r {ssh_target}:{remote_path} {lokal_path}'
subprocess.run(scp_cmd, shell=True, check=True)
def pull_data(source_path, desti_path):
if args.hosts:
for host in args.hosts:
ssh_target = f'{args.user}@{host}'
scp_cmd = f'scp -r {ssh_target}:{source_path} {desti_path}'
subprocess.run(scp_cmd, shell=True, check=True)
# --- MAIN ---
......@@ -151,19 +153,17 @@ def pull_data(remote_path, lokal_path):
args = parse_arguments()
# Setup all paths and folders
main_folder = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
main_folder_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
simulation_path = args.sim
data_path = os.path.join(args.data, "output")
test_data_path = os.path.join(args.data, "test_data")
stat_path = os.path.join(main_folder, "statistics")
os.makedirs(stat_path, mode=0o777, exist_ok=True)
# Setup arguments for Sim
event_list = create_event_list()
# Run detectorSimulation
run_sim(event_list, data_path, simulation_path, stat_path)
run_sim(event_list, data_path, simulation_path, main_folder_path)
# Pull data for visualizer
pull_data(data_path, main_folder)
pull_data(data_path, main_folder_path)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment