我一直在试图编写一个基本的终端仿真脚本,因为某些原因,我在我的Mac上没有终端访问权限。但是要在搅拌机中编写游戏引擎脚本,控制台通常在您开始搅拌的终端中打开,这一点至关重要。
只是做简单的事情,如删除,重命名等我曾经执行命令使用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()))
。那应该产生一个我可以像终端一样使用的交互式shell,不是吗?Python中的基本终端模拟
但无论哪种方式,我不能保持连接,并使用最后一个例子,我可以打电话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不允许您从运行过程中打开自己的终端窗口吗? – JAB 2012-07-24 16:13:34
据我所知,在Mac上如果你需要控制台,你需要通过直接打开默认启动终端的可执行文件来启动blender。但我无法打开任何终端窗口,因为家长控制在我的Mac上被激活,但是我很确定在搅拌机中的脚本不是管理员想要限制的 – lucaba 2012-07-24 16:19:33
您可能可以使用或获取适用于Mac的Terminal.app 。 – user1277476 2012-07-24 17:04:04