我正在尝试在python中创建一个简单的脚本,它本质上是一个shell终端。它将反复询问输入命令并尝试执行给定的os命令。我无法弄清楚的是,如何让Python“记住”执行的命令。
我的意思是:
ls
cd exampledir
ls
exampledir
由于命令序列是ls
> cd exampledir
> ls
我希望程序返回exampledir的内容,而是两个ls
命令的输出相同。
有没有办法让Python以某种方式'记住'执行的命令并根据以前的命令执行下一个命令?
我知道你可以使用cd exampledir && ls
之类的东西,但这不是我想要的。这些命令必须像shell终端一样单独执行。
代码:
import subprocess
while True:
cmd = input("Command to Execute: ")
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out = p.communicate()[0]
print(out)
答案 0 :(得分:1)
你不能cd
使用subprocess
模块,该函数将运行但路径不会因正在运行的python脚本而改变,
你可以做的是:
import os
if # condition where cd command used:
os.chdir("path/to/new/dir")
这将改变您正在运行的python脚本的路径,然后您可以ls
获得不同的输出。
答案 1 :(得分:0)
你必须要理解的是:你想写一个shell命令的完整解释器。这意味着:任何改变 shell 的状态的命令都需要改变一些内部状态。
含义:你的python"翻译"在某个目录中启动。因此,当您告诉解释程序更改目录时,它不能将该请求发送到某个稍后会消失的shell。
换句话说:你不能双管齐下。您可以将所有命令传递到子流程中;导致构成问题的问题。或者你的翻译" "所有的工作"本身。
只是为了记录:正如你可能已经猜到的那样 - 写一个" shell"是一项复杂的任务。是什么让你认为你应该重新发明那个轮子?