python子进程终端mac osx
长期潜伏者,第一次海报 我知道在互联网上有很多关于使用子流程的例子,但是我还没有找到一个例子来解释我需要采取什么步骤来创建一个新的终端窗口,并向它发送命令。有很多帖子提供了通过直接子流程调用启动工具和脚本的变通方法,但我还没有找到任何能够真正回答如何将命令正确发送到终端的原始问题的帖子 在我的例子中,我需要打开一个新的终端窗口,然后发送到某个应用程序的特定版本的路径,最后是我希望在该应用程序中打开的文件的路径 我知道如何使用subprocess直接调用所需的应用程序(无需打开可见终端),如何使用subprocess打开新终端,以及如何调用应用程序路径或文件路径(无法使用--args for open()或我找到的任何其他解决方法使两者一起执行) 一旦打开终端,我就无法发送命令。下面是打开terminal的一个新实例并将其发送到ls的简单版本,这不起作用python子进程终端mac osx,python,macos,terminal,subprocess,popen,Python,Macos,Terminal,Subprocess,Popen,长期潜伏者,第一次海报 我知道在互联网上有很多关于使用子流程的例子,但是我还没有找到一个例子来解释我需要采取什么步骤来创建一个新的终端窗口,并向它发送命令。有很多帖子提供了通过直接子流程调用启动工具和脚本的变通方法,但我还没有找到任何能够真正回答如何将命令正确发送到终端的原始问题的帖子 在我的例子中,我需要打开一个新的终端窗口,然后发送到某个应用程序的特定版本的路径,最后是我希望在该应用程序中打开的文件的路径 我知道如何使用subprocess直接调用所需的应用程序(无需打开可见终端),如何使用
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)
这很可能是一个微不足道的问题,我只是错过了一些东西,但我一直无法找到说明我需要什么的信息或示例,我开始对此感到失望,所以我想我会寻求帮助
非常感谢您的帮助!短暂性脑缺血发作
open-n
/应用程序/实用程序/终端应用程序
open
本身将创建新的进程
进入终端
并退出。因此,您将管道连接到错误的流程ls
传递给stdin的那一刻
不存在(除非您将-W选项传递给打开的,
,
但由于2)的问题,它肯定不会有帮助tell application "System Events"
tell process "Terminal"
keystroke "ls"
keystroke return
end tell
end tell
然后通过Popen通过osascript-e'
运行此脚本。是的,这相当棘手(我认为这是一个黑客)
是的,向Popen传递多行字符串和确定正确的终端窗口可能会有问题。
但这是可能的。@cody 我对你的回答的回答太长,因此我要回答:
p = Popen(['open', '-a', 'Terminal', '-n', '--args', '/Applications/Nuke6.3v8/Nuke6.3v8.app/Nuke6.3v8'])
p = Popen(['open', '-a', 'Terminal', '-n', '--args', '/Path/to/Nuke/File.nk'])
我无法使以下各项正常工作:
p = Popen(['open', '-a', 'Terminal', '-n', '--args', '/Applications/Nuke6.3v8/Nuke6.3v8.app/Nuke6.3v8', '/Path/to/Nuke/File.nk'])
从那以后,我的想法可能是我应该在Popen中启动终端,然后传递我需要的命令。那没用,然后我就来了,哈哈
再次感谢您的帮助!仅仅知道我不能发送到我想要终止的命令就节省了我大量的时间,而这些时间本可以花在持续不断的研究上 不幸的是,这并不像你想的那么容易。终端打开它自己的子进程(例如bash)并直接与它们通信。向终端的stdin发送任何东西都不会到达其他进程。你可能没有正确处理这个问题。谢谢korylprince,我将尝试以不同的方式处理它。感谢您的回复。