golang ssh session 输出内容顺序问题

使用SSH包写了一个SCP文件到远程服务器的东东

func sendFile(client *ssh.Client, src string, dest string) error {
    session, err := client.NewSession()
    if err != nil {
        return err
    }
    defer session.Close()
    go func() error {
        w, errs := session.StdinPipe()
        if errs != nil {
            return errs
        }
        defer w.Close()
        fileSrc, srcErr := os.Open(src)
        if srcErr != nil {
            return srcErr
        }
        srcStat, fileErr := fileSrc.Stat()
        if fileErr != nil {
            return fileErr
        }
        fmt.Fprintln(w, "C0644", srcStat.Size(), filepath.Base(dest))
        io.Copy(w, fileSrc)
        fmt.Fprint(w, "x00") // 传输以x00结束
        return nil
    }()
    if err := session.Run("/usr/bin/scp -qrt " + filepath.Dir(dest)); err != nil {
        return err
    }
    return nil
}

在服务器上执行一个PY脚本

func execCmd(client *ssh.Client, cmd string) (error, string) {
    sessions, err := client.NewSession()
    if err != nil {
        return err, ""
    }
    defer sessions.Close()
    str, errc := sessions.CombinedOutput(cmd)
    return errc, string(str)
}

结果

SCP文件是正常的,在执行PY脚本的时候代码也全部执行了,不过输出的结果不一致
和在服务器上直接执行python xxx.py par1 par2 不一样
xxx.py

os.system(‘tar zxvf xxx.tar.gz’)//这个会显示解压文件的路径
ptint(“start”)
os.system(cp xxx.class)
print(“stelp 2”)
os.system(‘tar zcvf xxx.tar.gz ./’)//这个会显示路径

GO得到的结果

显示tar zxvf 的结果
显示tar zcvf 的结果
print(start)
print(step 2)

没闹明白为啥这样的 是不是和PY调用系统命令有关系.

发表评论

电子邮件地址不会被公开。 必填项已用*标注