【发布时间】:2013-07-21 21:08:39
【问题描述】:
长期潜伏者,第一次海报。
我知道整个互联网上有很多关于使用子进程的示例,但是我还没有找到一个解释我需要采取哪些步骤来生成一个新的终端窗口并发送命令。有很多帖子提供了通过直接子进程调用启动工具和脚本的变通方法,但我还没有找到任何真正回答如何正确发送命令到终端的原始问题的帖子。
就我而言,我需要打开一个新的终端窗口,然后将路径发送到特定版本的应用程序,最后是我希望在该应用程序中打开的文件的路径。
我知道如何使用子进程直接调用所需的应用程序(不打开可见终端),如何使用子进程打开一个新终端,以及如何调用应用程序路径或文件路径(无法使用 --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)并直接与它们通信。向终端的标准输入发送任何内容都不会到达其他进程。您可能错误地处理了这个问题。
-
感谢 korylprince,我将尝试以不同的方式处理它。感谢您的回复。
标签: python macos terminal subprocess popen