如何将execvp的输出传递给python中的变量

问题描述

我有一个任务,我们在为Linux OS制作外壳。而且我有很多问题!

我被允许使用 os 库中的某些方法在python中执行此操作。这个想法是我的程序应该直接与linux操作系统调用通信。

所以这包括:

  • 创建
  • 打开
  • 关闭
  • 阅读
  • 退出
  • 管道
  • 执行
  • Dup2
  • 等待

到目前为止,我制作了一个可以使用 execvp 执行命令的外壳程序,但是我在管道方面遇到了麻烦。

I was reading this q/a and i felt that I almost understood what i have to do

我想我必须使用 Dup2 来写(也许以后再读)。另外,如果我在有关管道的某些时候应该使用read()和write(),我也有些困惑。

from os import (
    execvp,wait,fork,close,pipe,dup2,)
from os import _exit as kill

STDIN = 0
STDOUT = 1
STDERR = 2

CHILD = 0


def piping(cmd):
    reading,writing = pipe()
    pid = fork()
    if pid > CHILD:
        wait()
        close(writing)
        dup2(reading,STDIN)
        execvp(cmd[1][0],cmd[1])
        kill(127)
    elif pid == CHILD:
        close(reading)
        dup2(writing,STDOUT)
        execvp(cmd[0][0],cmd[0])
        kill(127)
    else:
        print('Command not found:',cmd)


piping([['ls','-l','/'],['grep','var']])

如果我运行此代码,它将起作用。但我有些不明白:

  • execvp如何知道它从管道中获取了额外的参数?
  • 我到底为什么要杀人,为什么要杀死127?
  • 如何在父级内部运行execvp?在C语言中也可以吗?
  • 如果我有一个嵌套管道,例如:ls -l / | grep var | xclip -selection clipboard,那么我应该创建一个新的fork吗? (也许有些递归)

写文件不是分配的一部分,但是稍后我可以使管道工作时也可以实现它。

  • 我也应该使用dup2还是可以读/写

提前谢谢! :)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)