Python 使用Pexpect生成终端窗口和SSH命令

Python 使用Pexpect生成终端窗口和SSH命令,python,macos,ssh,terminal,pexpect,Python,Macos,Ssh,Terminal,Pexpect,我尝试使用Python和Pexpect模块完成两件事: 打开多个终端窗口(在Mac上)以显示输出 向每个终端窗口分别发送一个ssh命令(每个窗口将ssh到不同的主机,然后运行另一个命令) 这是我当前的代码: import pexpect import time from subprocess import * command = "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal ssh user@host" ssh_tu

我尝试使用Python和Pexpect模块完成两件事:

  • 打开多个终端窗口(在Mac上)以显示输出
  • 向每个终端窗口分别发送一个ssh命令(每个窗口将ssh到不同的主机,然后运行另一个命令)
  • 这是我当前的代码:

    import pexpect
    import time
    from subprocess import *
    
    command = "/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal ssh user@host"
    ssh_tunnel = pexpect.spawn (command)
    
    ssh_tunnel.expect ('Password:')
    time.sleep (0.1)
    ssh_tunnel.sendline ("password")
    time.sleep (60) #
    ssh_tunnel.expect (pexpect.EOF)
    
    我看到的问题是,我能够打开一个新的终端应用程序,但是,该终端上没有运行任何命令

    我还看到一个问题,试图产生多个窗口。当我尝试这样做时:

    ssh_tunnel = pexpect.spawn("/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal")
    ssh_tunnel.expect ('test')
    
    ssh_tunnel2 = pexpect.spawn("/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal")
    ssh_tunnel2.expect ('test')
    
    我只生成一个终端窗口

    我尝试了python中的subprocess模块来生成多个终端窗口,效果很好,但我知道subprocess处理ssh的能力不如处理pexpect

    子流程模块代码:

    from subprocess import *
    
    command = '/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal'
    new_terminal = Popen(command, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True)
    

    pexpect设计用于使用CLI命令,而不是GUI应用程序。与
    ssh_tunnel.expect(pexpect.EOF)
    不同,您是否可以提供“$”to expect?+1,用于询问与编程和开发有关的ssh问题。@MaheshKaria您好,我尝试用“$”替换expect语句,但是,终端生成了。应用程序确实启动了,但终端没有弹出。@pynexj您好,我仍在寻找解决此问题的替代方案,并找到了一些推荐方案,如fabric。尽管如此,我仍在测试它是否可以在python中使用,或者我应该在bash或powershell中使用它。pexpect设计用于使用CLI命令,而不是GUI应用程序。而不是
    ssh_tunnel.expect(pexpect.EOF)
    你能提供“$”以期望吗?+1来询问与编程和开发有关的ssh问题。@MaheshKaria Hi,我试图用“$”替换expect语句,但是,终端spawn。应用程序确实启动了,但终端没有弹出。@pynexj您好,我仍在寻找解决此问题的替代方案,并找到了一些推荐方案,如fabric。尽管如此,我仍在测试它是否可以在python中使用,还是应该在bash或powershell中使用。