使用subprocess.Popen调用ssh出现奇怪缩进空格递增问题
问题原因与解决方案
原因分析
你遇到的缩进递增问题,是因为ssh默认会请求分配伪终端(PTY)。即便你重定向了stdout和stderr到DEVNULL,ssh进程仍会修改当前终端的行处理属性(比如开启自动缩进、调整换行模式),导致后续print输出的文本被逐步缩进。
解决方案
在ssh命令中添加-T参数,强制禁用伪终端分配,这样ssh就不会修改终端的默认设置了:
from subprocess import Popen, DEVNULL from time import sleep # 添加-T参数阻止ssh分配伪终端 Popen(["ssh", "-T", "-R", "80:127.0.0.1:8080", "localhost.run"], stdout=DEVNULL, stderr=DEVNULL) while True: print("Hi") sleep(1)
如果上述方法无效,还可以尝试添加close_fds=True参数,确保子进程完全脱离当前终端的文件描述符:
Popen(["ssh", "-T", "-R", "80:127.0.0.1:8080", "localhost.run"], stdout=DEVNULL, stderr=DEVNULL, close_fds=True)
内容的提问来源于stack exchange,提问作者KasRoudra
相关产品推荐
相关产品推荐

