首页 > 解决方案 > 尝试使用 fork、exec 和 pid wait 在 Python 中编写 Unix 类型的 shell

问题描述

我正在尝试使用fork,exec和. 在 Python 中编写一个 Unix 类型的 shell waitpid。到目前为止,我有这个代码:

while True:
    pid = os.fork()
    command = os.getcwd() + ">"
    x = input(command)
    split_string = x.split(" ")
    if pid == 0:
        os.execvp(split_string[0], split_string)
    else:
        finish = os.waitpid(0, 0)
    print(finish)

但是,当我从 Unix shell 使用它时,它什么也没做。

标签: pythonshellunix

解决方案


请注意,您的提示(您将其命名为command)被打印了两次。这是因为子进程在等待输入命令时卡在自己的提示符中。如果您按Enter一次,然后键入您的命令(例如ls) ,然后再按一次,Enter您的程序就可以工作了。

一个简单的解决方法是os.fork()在提示之后调用:

import os

while True:
    command = os.getcwd() + ">"
    x = input(command)
    split_string = x.split(" ")
    pid = os.fork()
    if pid == 0:
        os.execvp(split_string[0], split_string)
    else:
        finish = os.waitpid(0, 0)
    print(finish)

推荐阅读