reso-execution/runtime.go

64 lines
1.5 KiB
Go
Raw Normal View History

2024-03-16 13:41:03 +00:00
package main
import (
"log"
"os/exec"
"strings"
// import file writer
"os"
// import websocket
)
func handleCase(caseName string, data string) strings.Builder {
// get the first line of the message from the client
// strip : from the caseName
caseName = strings.Replace(caseName, ":", "", -1)
returnData := strings.Builder{}
switch caseName {
case "py", "python", "python3":
log.Println("Python is not supported yet")
returnData = runPython(data)
case "go", "golang":
log.Println("Golang is not supported yet")
// returnData = runGo(data)
case "js", "javascript":
log.Println("Javascript is not supported yet")
// returnData = runJs(data)
case "cpp", "c++":
log.Println("C++ is not supported yet")
}
return returnData
}
func runPython(data string) strings.Builder {
// write Data to `./workspace/main.py`
file, err := os.Create("./workspace/main.py")
if err != nil {
log.Println("Error creating file")
}
defer file.Close()
file.WriteString(data)
// find python, python3, or py in the system
fname, err := exec.LookPath("python3")
if err != nil {
log.Println("Python not found")
}
// run the python file
cmd := exec.Command(fname, "./workspace/main.py")
// write output to value, and then return it
cmdOut := &strings.Builder{}
cmd.Stdout = cmdOut
cmdErr := &strings.Builder{}
cmd.Stderr = cmdErr
cmd.Run()
// combine the output and error
cmdOut.WriteString(cmdErr.String())
// print the output to the console
log.Println(cmdOut.String())
return *cmdOut
}