0
我试图做多管道一起去:Golang exec.Command多个管道
ctags := exec.Command("ctags", "-x", "--c-types=f", "./tmp/"+fileName)
grep := exec.Command("grep", "member")
awk := exec.Command("awk", "'{$1=$2=$3=$4=\"\"; print $0}'")
grep.Stdin, _ = ctags.StdoutPipe()
awk.Stdin, _ = grep.StdoutPipe()
awk.Stdout = os.Stdout
_ = grep.Start()
_ = awk.Start()
_ = ctags.Run()
_ = grep.Wait()
_ = awk.Wait()
fmt.Println(awk)
这是预期的输出应该是什么样子:
$ ctags -x --c-types=f ./tmp/genetic_algorithm.py | grep member | awk '{$1=$2=$3=$4=""; print $0}'
def __init__(self, vector, fitness_function):
def __init__(self, population_size=10, crossover_points=[.3, .6],
def apply_crossover(self, genotype_1, genotype_2):
def apply_mutation(self, child_genotype):
def calc_population_fitness(self, individuals):
def evolve(self):
def final_genotype(self):
def fitness(self):
def generate_offspring(self, selected):
def genotype(self, indiv):
def get_accuracy(nn_hidden_structure=[10]):
def parse_bitstring(self, genotype):
def run(self):
def select_for_crossover(self):
def slice_vector(self, vector):
def validate_vector(self, vector, max_nodes=100):
def vector_from_bitstring(self, genotype):
这是我什么越来越:
&{/usr/bin/awk [awk '{$1=$2=$3=$4=""; print $0}'] [] 0xc4204ce020 0xc42007e008 <nil> [] <nil> 0xc4201fa900 exit status 2 <nil> <nil> true [0xc4204ce020 0xc42007e008 0xc4204ce048] [0xc4204ce048] [] [] 0xc420070360 <nil>}
我发现与围棋的管道命令的几个例子,但大多只能管两个命令。有这个例子https://gist.github.com/dagoof/1477401,但是当我根据这个逻辑来安排我的代码时,我得到了同样的问题。我的管道是否正确?该命令只是对该Python文件执行繁琐的ctags,然后grep指示方法的任何行,然后只忽略grepped输出的前四列。
难道你不想打印'awk'命令的输出而不是指向'Cmd'结构的指针的值吗? – e0k
@ e0k是的,我想捕获awk的Stdout。现在就开始工作。如果它很混乱,你可以忽略fmt.Println()。 – Soubriquet
您可能会发现将'Stderr'流重定向到'os.Stderr',以便您可以看到错误消息:'awk.Stderr = os.Stderr'等。 – e0k