糖醋咸鱼多放辣 2023-03-08 18:45 采纳率: 72.7%
浏览 68
已结题

Python脚本如何让os.popen()可以做到切换窗口呢

img


我在ubuntu20.04版本的终端运行python3 xxx.py脚本(已安装env虚拟环境),然后用pyautogui库的快捷键另外打开一个终端窗口,然后我想在第二个终端窗口ssh再输入一个Linux命令,我希望可以用os.popen()获取到输入Linux命令后的响应内容,但是Linux命令却作用到了第一个终端窗口,也就是脚本执行的窗口(绿色箭头所指向的终端窗口),我的预期是希望popen()可以作用在快捷键Ctrl+Alt+t打开的终端窗口,我该如何切换进程呢

img


我的ubuntu20.04一直装不上subprocess

  • 写回答

5条回答 默认 最新

  • 「已注销」 2023-03-08 19:13
    关注

    参考GPT和自己的思路:在Linux系统中,一个窗口对应一个进程,而不同进程之间是不能直接交互的。因此,如果你想在第二个终端窗口中执行命令并获取其输出,你需要启动一个新的进程来执行命令。

    你可以使用Python的subprocess模块来创建一个新的进程,并将命令的输出保存在一个变量中。然后,你可以在第一个终端窗口中使用pyautogui库发送一些信号,例如按下某些键或者输入一些特定的字符串,来使其失去焦点,然后在第二个终端窗口中执行命令。

    下面是一个示例代码:

    import subprocess
    import pyautogui
    
    # 在第二个终端窗口中执行的命令
    cmd = "ls -l"
    
    # 获取第二个终端窗口的句柄
    # 在这里使用了pyautogui来模拟按键和输入,需要先将其置于前台
    pyautogui.hotkey("ctrl", "alt", "t")
    pyautogui.typewrite(cmd)
    pyautogui.press("enter")
    
    # 将第二个终端窗口设置为前台窗口,使其具有焦点
    pyautogui.hotkey("alt", "tab")
    
    # 创建一个新的进程来获取命令的输出
    p = subprocess.Popen(
        cmd,
        shell=True,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE
    )
    
    # 获取命令的输出
    output, error = p.communicate()
    
    # 输出命令的输出和错误信息
    print("Output:", output.decode())
    print("Error:", error.decode())
    
    
    

    在上面的代码中,我们首先使用pyautogui库模拟按下快捷键来打开一个新的终端窗口,并在其中输入了一个Linux命令。然后,我们使用pyautogui模拟按下alt+tab键将第二个终端窗口设置为前台窗口,使其具有焦点。
    接下来,我们使用subprocess模块创建了一个新的进程来执行命令,并将命令的输出保存在了一个变量中。最后,我们输出了命令的输出和错误信息。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 修改了问题 3月8日
  • 创建了问题 3月8日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀