blob: 27defcd42ed64cf8231b47cbed6510b381d97929 [file] [log] [blame]
// 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)
}
}