worker_cmd.go 676 B

12345678910111213141516171819202122232425262728293031323334
  1. package worker
  2. import (
  3. "crypto/sha1"
  4. "fmt"
  5. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/cmdutil"
  6. "io"
  7. "os/exec"
  8. )
  9. type CommandWorker struct {
  10. executable string
  11. }
  12. func NewCommandWorker(executable string) *CommandWorker {
  13. return &CommandWorker{executable}
  14. }
  15. func (c *CommandWorker) Key(r interface{}) string {
  16. args := r.([]string)
  17. h := sha1.New()
  18. h.Write([]byte(c.executable))
  19. for _, v := range args {
  20. h.Write([]byte(v))
  21. }
  22. sum := h.Sum(nil)
  23. return fmt.Sprintf("%x", sum)
  24. }
  25. func (c *CommandWorker) Handle(r interface{}, w io.Writer) error {
  26. args := r.([]string)
  27. cmd := exec.Command(c.executable, args...)
  28. return cmdutil.ExecAndWriteStdout(cmd, w)
  29. }