0

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 以及输入和输出重定向。

这可能很简单,但我似乎无法发现导致问题的原因......

4

0 回答 0