代码拉取完成,页面将自动刷新
package python
import (
"bytes"
"context"
"errors"
"fmt"
"io"
"os"
"os/exec"
"path/filepath"
)
const (
pyExt = ".py"
)
type Python struct {
BinPath string
Ext string
Envs []string
}
type Option func(*Python)
func WithExt(ext string) Option {
return func(p *Python) {
p.Ext = ext
}
}
func WithEnvs(envs ...string) Option {
return func(p *Python) {
p.Envs = envs
}
}
func New(pythonFile string, options ...Option) *Python {
binPathAbs, _ := filepath.Abs(pythonFile)
p := &Python{
BinPath: binPathAbs,
Ext: pyExt,
}
for _, option := range options {
option(p)
}
return p
}
func (p *Python) ExecCtx(ctx context.Context, codeDir, pyFile string, args ...string) error {
cmd := exec.CommandContext(ctx, p.BinPath, append([]string{fmt.Sprintf("%s%s", pyFile, p.Ext)}, args...)...)
cmd.Dir = codeDir
cmd.Env = p.Envs
errContext := new(bytes.Buffer)
errContext.WriteString(fmt.Sprintf("cmd: [ %s ]\n", cmd.String()))
cmd.Stderr = io.MultiWriter(errContext, os.Stderr)
cmd.Stdout = io.MultiWriter(errContext, os.Stdout)
err := cmd.Run()
if err != nil {
err = errors.New(errContext.String() + "\n\n" + err.Error())
}
return err
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。