美文网首页Go语言用例
golang子进程的的标准输出和标准错误

golang子进程的的标准输出和标准错误

作者: CodingCode | 来源:发表于2018-04-11 19:45 被阅读79次

golang子进程的的标准输出和标准错误

使用exec.Run()运行子进程的时候,子进程的标准输入输出在哪里呢。
看下面的例子,运行主进程时,子进程sub.sh的输出会不会到屏幕(主进程的输出呢)

package main

import (
    "log"
    "os/exec"
)

func main() {
    cmd := exec.Command("./sub.sh")

    err := cmd.Run();
    if err != nil {
        log.Fatal(err)
    }
}

子进程如下:

$ cat sub.sh 
#!/bin/bash

echo "1111"
1>&2 echo "2222"

运行结果

$ ./main
$

什么也没有输出。

分析子进程的fd属性

$ ls -l /proc/<subprocesspid>/fd/
total 0
lr-x------. 1 ... 64 Apr 12 03:28 0 -> /dev/null
l-wx------. 1 ... 64 Apr 12 03:28 1 -> /dev/null
l-wx------. 1 ... 64 Apr 12 03:27 2 -> /dev/null

可以看到子进程的stdin/stdout/stderr都设置到了/dev/null所以什么也没有。

如何让它输出到屏幕呢

package main

import (
    "os"
    "log"
    "os/exec"
)

func main() {
    cmd := exec.Command("./sub.sh")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr

    err := cmd.Run();
    if err != nil {
        log.Fatal(err)
    }
}

需要设置cmd的Stdout和Stderr,再运行我们可以看到子进程的fd属性

lr-x------. 1 ... 64 Apr 12 03:30 0 -> /dev/null
lrwx------. 1 ... 64 Apr 12 03:30 1 -> /dev/pts/12
lrwx------. 1 ... 64 Apr 12 03:30 2 -> /dev/pts/12

stdout和stderr同时指向了当前终端。

相关文章

  • golang子进程的的标准输出和标准错误

    golang子进程的的标准输出和标准错误 使用exec.Run()运行子进程的时候,子进程的标准输入输出在哪里呢。...

  • 小鸟初学Shell编程(五)输入输出重定向

    重定向作用 一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符。 重定向可以让我们的程序的标准输出、错误...

  • 标准输出和标准错误输出

    相关概念 默认情况下,总是有三个文件处于打开状态 标准输入(键盘输入) 对应文件描述符0 标准输出(输出到屏幕...

  • Linux学习 -> 数据重定向

    linux有三种标准输出设备, 分别是 标准输出, 标准错误输出, 标准输入 标准输出, 标准错误输出对应的物理设...

  • golang标准错误输出用法

    提取自golang源码,os.Stderr官方用法

  • 3.输出输入重定向

    相关概念: 输出: 默认标准输出: STDOUT 1 默认错误输出: STDERR 2 标准输出和错误输出:...

  • Day-12重定向,管道,pee,xagrs

    1.重定向 1)标准输入,标准输出,标准错误输出每个运行的程序都再/proc/进程号/fd下有三个软链接 0,1,...

  • 文件描述符和重定向

    【系统预留描述符】 0:stdin 标准输入 1:stdout 标准输出 2:stderr 标准错误 标准错误输出...

  • 七、管道、重定向和参数传递

    一、重定向 标准输入、标准正确输出、标准错误输出 进程在运行的过程中根据需要会打开多个文件,每打开一个文件会有一个...

  • 数据流重定向

    数据流重定向 简单的重定向 标准错误重定向 标准输出和标准错误输出虽然都指向终端屏幕,但它们实际并不一样. 将标准...

网友评论

    本文标题:golang子进程的的标准输出和标准错误

    本文链接:https://www.haomeiwen.com/subject/viizhftx.html