| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| package pkg |
| |
| import ( |
| protos "airavata-agent/protos" |
| "log" |
| "os/exec" |
| ) |
| |
| func ExecutePython(stream Stream, executionId string, envName string, workingDir string, code string) { |
| log.Printf("[agent.go] executePython() Execution id %s\n", executionId) |
| log.Printf("[agent.go] executePython() Env name %s\n", envName) |
| log.Printf("[agent.go] executePython() Working Dir %s\n", workingDir) |
| log.Printf("[agent.go] executePython() Code %s\n", code) |
| // Run command |
| cmd := exec.Command("micromamba", "run", "-n", envName, "python", "-c", code) |
| cmd.Dir = workingDir |
| output, err := cmd.CombinedOutput() |
| responseString := string(output) |
| if err != nil { |
| log.Printf("[agent.go] executePython() error: %v\n", err) |
| } else { |
| log.Printf("[agent.go] executePython() completed: %s\n", responseString) |
| } |
| msg := &protos.AgentMessage{ |
| Message: &protos.AgentMessage_PythonExecutionResponse{ |
| PythonExecutionResponse: &protos.PythonExecutionResponse{ |
| ExecutionId: executionId, |
| ResponseString: responseString, |
| }, |
| }, |
| } |
| if err := stream.Send(msg); err != nil { |
| log.Printf("[agent.go] executePython() failed to send result to server: %v\n", err) |
| } else { |
| log.Printf("[agent.go] executePython() Sent result to server: %s\n", output) |
| } |
| } |