call(argv) 函数内的代码片段
if '|' in argv:
# Split argv into two commands, lst[0] and lst[1]
r,w=os.pipe()
pid=fork()
# Parent
if pid >0:
os.close(w)
os.dup2(r,0)
run(lst[0])
os.close(r)
os.wait()
# Child
if pid==0:
os.close(r)
os.dup2(w,1)
run(lst[1])
os.close(w)
os._exit(1)
上面的代码给出了一个只有两个命令的简单管道的结果,但它会导致 shell 过早退出。如何让此代码停止退出我的脚本并让它返回到命令提示符?
程序如何运作
孩子执行第二个命令。通过使用 dup2() 调用将输出沿管道重定向,其输出被发送到管道。这是通过使用值 sys.stdout 更改管道写入文件描述符来实现的。
然后,父级通过 dup2() 调用使用输入重定向。这会产生最终输出,然后在脚本退出后直接显示在屏幕上。
run 函数调用接受命令及其参数。它执行给定的命令。它还运行 globing 以及输入和输出重定向。
这可能很简单,但我似乎无法发现导致问题的原因......