【发布时间】:2012-07-22 23:50:00
【问题描述】:
我一直在尝试编写一个基本的终端仿真脚本,因为出于某种原因,我的 mac 上没有终端访问权限。但是要在 Blender 中编写游戏引擎脚本,控制台(通常在您启动 Blender 的终端中打开)至关重要。
只是做一些简单的事情,比如删除、重命名等。我曾经使用stream = os.popen(command) 和print (stream.read()) 执行命令。这适用于大多数事情,但不适用于任何互动。
不久我发现了一种新方法:sp = subprocess.Popen(["/bin/bash", "-i"], stdout = subprocess.PIPE, stdin = subprocess.PIPE, stderr = subprocess.PIPE) 然后print(sp.communicate(command.encode()))。那应该产生一个我可以像终端一样使用的交互式外壳,不是吗?
但无论哪种方式,我都无法保持连接打开,并且使用最后一个示例,我可以调用一次 sp.communicate,给我以下输出(在本例中为 'ls /')和一些错误:(b'Applications\n[...]usr\nvar\n', b'bash: no job control in this shell\nbash-3.2$ ls /\nbash-3.2$ exit\n')。
第二次它给了我ValueError: I/O operation on closed file.
有时(比如'ls')我只得到这个错误:b'ls\nbash-3.2$ exit\n'。
这是什么意思?如何使用 python 模拟终端,使我能够控制交互式 shell 或运行搅拌机并与控制台通信?
【问题讨论】:
-
Blender 是否不允许您从正在运行的进程中打开自己的终端窗口?
-
据我所知,在 mac 上,如果您需要控制台,您需要通过直接打开默认启动终端的可执行文件来启动搅拌机。但无论如何我都无法打开任何终端窗口,因为我的 Mac 上激活了家长控制,但我很确定 Blender 中的脚本不是管理员想要限制的
-
您可能可以为您的 Mac 使用或获取 Terminal.app。
标签: python shell terminal blender