长期潜伏者,第一次海报。蟒蛇子进程终端mac osx
我知道整个interweb中有很多使用子进程的例子,但是我还没有找到一个解释我需要用来生成一个新的终端窗口并发送命令的步骤。有大量的帖子提供了通过直接子进程调用来启动工具和脚本的解决方法,但是我还没有发现任何实际回答了如何正确地向终端发送命令的原始问题。
在我的情况下,我需要打开一个新的终端窗口,然后将路径发送到特定版本的应用程序,最后到我希望在该应用程序中打开的文件的路径。
我知道如何使用子进程直接调用所需的应用程序(无需打开可见终端),如何使用子进程打开新的终端,以及如何调用应用程序路径或文件路径(还没有使用--args for open()或者我发现的任何其他解决方法来让两者一起执行。
一旦打开它,我一直无法发送终端命令。以下是打开终端的新实例并发送ls的简单版本,不起作用。
from subprocess import Popen, PIPE, STDOUT
p = Popen(['open', '-a', 'Terminal', '-n'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
output = p.communicate(input='ls')
print(output)
这很可能是一个微不足道的问题,我只是失去了一些东西,但我一直无法找到的信息或一个例子,说明我需要什么,我开始感到沮丧,所以我我想我会寻求帮助。
任何援助非常感谢! TIA
这很不容易,就像你想的那样。终端打开它自己的子进程(例如bash)并直接与它们进行通信。向终端的stdin发送任何内容都不会进入其他进程。您可能错误地处理了这个问题。 – korylprince
谢谢korylprince,我会试着去改变它。欣赏回应。 – Glenn