iTerm2循环内拆分窗格执行命令未触发回车问题求助
问题根因
你调用的async_send_text方法仅会将文本输入到终端的输入缓冲区,不会自动触发回车执行逻辑,等价于手动输入命令后没有按回车键,命令自然不会运行。你之前手动操作时会主动按回车,所以没有这个问题。另外你当前代码里的cd命令也没有加回车,目录切换逻辑实际上也不会生效。
修复方案
有两种通用修复方式:
方式1:给命令末尾主动追加换行符\n
import asyncio # 未引入异步库时需要添加该行 for repo in commands["run"]: split = await session.async_split_pane(vertical=True) # 窗格初始化存在极短延迟,加小等待避免输入丢失,非必需可根据实际运行效果调整 await asyncio.sleep(0.1) # 末尾加\n触发回车执行 await split.async_send_text(f'cd Projects/{repo}\n') if repo["yarn"] == True: await split.async_send_text('yarn start\n')
方式2:使用API自带的换行参数
如果你使用的是iTerm2官方Python API,async_send_text支持第二个参数send_newline,设为True时会自动在命令末尾追加换行:
import asyncio for repo in commands["run"]: split = await session.async_split_pane(vertical=True) await asyncio.sleep(0.1) await split.async_send_text(f'cd Projects/{repo}', send_newline=True) if repo["yarn"] == True: await split.async_send_text('yarn start', send_newline=True)
如果修改后命令还是没有执行,可以额外检查repo["yarn"]的取值是否为布尔值True,避免出现取值为字符串"true"/"True"导致条件判断不通过的情况。
内容的提问来源于stack exchange,提问作者Passaro
相关产品推荐
相关产品推荐

