如何在Linux系统的VS Code中用Python脚本实现分屏终端并执行指定Docker命令
如何在Linux系统的VS Code中用Python脚本实现分屏终端并执行指定Docker命令
嘿,我来帮你搞定这个需求!要在VS Code的Linux终端里自动分屏、同时执行两个Docker命令,其实用Python结合VS Code的命令行工具就能轻松实现,完全不用手动按快捷键。下面给你两种靠谱的方案,按需选就行:
方案一:精准模拟手动分屏操作(VS Code内置终端)
这个方案完全贴合你手动按Ctrl+Shift+5分屏的逻辑,通过Python调用VS Code的命令行接口完成所有操作:
步骤1:编写Python脚本
直接把下面的代码保存成run_docker_commands.py:
import subprocess import time # 定义你要执行的两个Docker命令 cmd1 = "sudo docker run --network=host --volume /home/villas/results:/villas/build/results --volume /home/villas/Docker-containers/webrtc-rtt.conf:/config.conf --privileged registry.git.rwth-aachen.de/acs/public/villas/node:master node /config.conf" cmd2 = "sudo docker run --network=host --volume /home/villas/results:/villas/build/results --volume /home/villas/Docker-containers/webrtc-loopback.conf:/config.conf --privileged registry.git.rwth-aachen.de/acs/public/villas/node:master node /config.conf" # 1. 打开第一个VS Code终端(如果当前没有的话) subprocess.run(["code", "--command", "workbench.action.terminal.new"], check=True) time.sleep(0.5) # 给终端留一点启动时间,避免命令发送失败 # 2. 向第一个终端发送第一个Docker命令并执行 subprocess.run( ["code", "--command", "workbench.action.terminal.sendSequence", f"text:{cmd1}\n"], check=True ) time.sleep(0.3) # 3. 触发终端分屏(模拟Ctrl+Shift+5的操作) subprocess.run(["code", "--command", "workbench.action.terminal.split"], check=True) time.sleep(0.5) # 4. 向分屏后的第二个终端发送第二个Docker命令并执行 subprocess.run( ["code", "--command", "workbench.action.terminal.sendSequence", f"text:{cmd2}\n"], check=True )
步骤2:解决sudo密码问题
因为命令里用到了sudo,直接运行脚本会卡在输入密码的步骤,建议给当前用户配置Docker免密权限:
- 运行
sudo visudo打开sudoers配置文件 - 在文件末尾添加一行(把
your_username换成你的实际用户名):your_username ALL=(ALL) NOPASSWD: /usr/bin/docker - 按
Ctrl+O保存,Ctrl+X退出编辑
步骤3:运行脚本
在VS Code的终端里执行python3 run_docker_commands.py,就能看到终端自动分屏,两个Docker命令同时跑起来了!
方案二:启动独立终端窗口(备选)
如果VS Code命令行的方法偶尔出现焦点问题,也可以用这个方案直接启动两个系统终端窗口执行命令(适合不需要严格在VS Code分屏的场景):
import subprocess cmd1 = "sudo docker run --network=host --volume /home/villas/results:/villas/build/results --volume /home/villas/Docker-containers/webrtc-rtt.conf:/config.conf --privileged registry.git.rwth-aachen.de/acs/public/villas/node:master node /config.conf" cmd2 = "sudo docker run --network=host --volume /home/villas/results:/villas/build/results --volume /home/villas/Docker-containers/webrtc-loopback.conf:/config.conf --privileged registry.git.rwth-aachen.de/acs/public/villas/node:master node /config.conf" # 启动第一个终端执行命令1 subprocess.Popen(["gnome-terminal", "--", "bash", "-c", cmd1]) # 启动第二个终端执行命令2 subprocess.Popen(["gnome-terminal", "--", "bash", "-c", cmd2])
注意:这个方案用的是gnome-terminal,如果你用的是其他桌面环境(比如KDE用konsole,XFCE用xfce4-terminal),把命令里的gnome-terminal换成对应终端的命令就行。
一些小提示
- 要是脚本执行时命令发送失败,试着把
time.sleep()的时间调长一点(比如改成1秒),给VS Code足够的响应时间 - 确保VS Code的
code命令已经加入系统PATH,一般安装VS Code后会自动配置,要是没找到可以手动添加:export PATH="$PATH:/usr/share/code/bin"
备注:内容来源于stack exchange,提问作者HUH987
相关产品推荐
相关产品推荐

