gpt4 book ai didi

python 子进程终端 mac osx

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:14 30 4
gpt4 key购买 nike

长期潜伏者,第一次海报。

我知道整个互联网上有很多关于使用子进程的例子,但是我还没有找到一个解释我需要采取的步骤来创建一个新的终端窗口,并向它发送命令。有很多帖子提供了通过直接子进程调用启动工具和脚本的变通方法,但我还没有找到任何真正回答如何正确地将命令发送到终端的原始问题的帖子。

在我的例子中,我需要打开一个新的终端窗口,然后将路径发送到特定版本的应用程序,最后发送到我希望在该应用程序中打开的文件的路径。

我知道如何使用 subprocess 直接调用所需的应用程序(无需打开可见终端),如何使用 subprocess 打开新终端,以及如何调用应用程序路径或文件路径(无法使用 --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)

这很可能是一个微不足道的问题,我只是遗漏了一些东西,但我一直无法找到说明我需要什么的信息或示例,我开始对此感到沮丧,所以我想我会问寻求帮助。

非常感谢任何帮助!时间差

最佳答案

  1. 首先,我怀疑您尝试运行的命令是否会运行。您是否先在终端中尝试过? open -an Terminal会给你一个错误。它可能应该类似于 open -n
    /Applications/Utilities/Terminal.app
  2. 第二,@korylprince 是对的:open自己会创建新的进程的 Terminal并退出。所以你将管道与错误的过程联系起来。
  3. 第三,路过的瞬间ls到标准输入那个过程尚不存在(除非您将 -W 选项传递给 open ,但由于第 2 个问题,它肯定无济于事。

所以我认为只有一个机会可以做到这一点:通过 AppleScript。您可以创建一个 AppleScript 字符串,如下所示:

tell application "System Events"
tell process "Terminal"
keystroke "ls"
keystroke return
end tell
end tell

然后通过 osascript -e '<your_script>' 运行这个脚本通过 Popen。

是的,这很棘手(我会说这是一个 hack)
是的,将多行字符串传递给 Popen 以及确定正确的终端窗口可能会出现问题。
但这是可能的。

关于python 子进程终端 mac osx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17799316/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com