gpt4 book ai didi

python - 不使用 os.execvp 时无限

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:50 28 4
gpt4 key购买 nike

我正在用 Python 编程,这涉及到我在 Linux 中用 Python 实现一个 shell。我正在尝试使用 os.execvp() 运行标准的 unix 命令。我需要不断向用户询问命令,所以我使用了无限循环。但是,无限 while 循环不起作用。我试过在线搜索,但它们对 Python 来说并不多。任何帮助,将不胜感激。谢谢

这是我到目前为止编写的代码:

import os
import shlex

def word_list(line):
"""Break the line into shell words."""
lexer = shlex.shlex(line, posix=True)
lexer.whitespace_split = False
lexer.wordchars += '#$+-,./?@^='
args = list(lexer)
return args



def main():
while(True):
line = input('psh>')
split_line = word_list(line)

if len(split_line) == 1:
print(os.execvp(split_line[0],[" "]))
else:
print(os.execvp(split_line[0],split_line))

if __name__ == "__main__":
main()

因此,当我运行它并输入输入“ls”时,我得到输出“HelloWorld.py”(正确)和“进程完成,退出代码为 0”。但是我没有得到正在等待下一个命令的输出“psh>”。当我运行这段代码时没有抛出异常。

最佳答案

您的代码不起作用,因为它使用了 os.execvp . os.execvp 用正在执行的程序完全替换当前进程镜像,您正在运行的进程成为 ls

要执行一个子进程,使用适当命名的subprocess模块。


如果是不明智的编程练习,那么您需要:

# warning, never do this at home!
pid = os.fork()
if not pid:
os.execvp(cmdline) # in child
else:
os.wait(pid) # in parent

os.fork 返回两次,在父进程中给出子进程的 pid,在子进程中为零。

关于python - 不使用 os.execvp 时无限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25113767/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com