为什么tmux和vim印垃圾在我的SSH包装剧本吗?

0

的问题

我写了一SSH包装脚本本地行编辑。 它援引类似于SSH。 例如: python3 sshwrapper.py [email protected] -CX. 问题是,当我接到一个远程计算机使用这个脚本和使用 vimtmux 在那里,一些垃圾是印刷。 这个问题不是具体到SSH,因为该问题还出现,当我使用这个脚本到包裹 bash 而不是的 ssh.

实例:

  • 后开始 tmux一些垃圾是印刷之后bash提示:

    abc@me:~$ ^[[?65;1;9c

  • 当打开一个新的文件中使用Vim vim mynewfile.txt这会出现在第一行:

    ^[[2;2R^[[>65;6003;1c^[]10;rgb:0000/0000/0000^G^[]11;rgb:ffff/ffff/dddd^G

我怎样解决这问题吗?

这是剧本中的问题:

import os
import pty
import select
import signal
import subprocess
import sys

master_fd, slave_fd = pty.openpty()
process = subprocess.Popen(['ssh'] + sys.argv[1:],
                           stdin=slave_fd,
                           stdout=slave_fd,
                           stderr=subprocess.STDOUT,
                           # Important for Ctrl-c in the remote terminal.
                           preexec_fn=os.setsid)

def sigint_handler(_signum, _frame):
    os.write(master_fd, b'\03')  # Send Ctrl-c.
signal.signal(signal.SIGINT, sigint_handler)

def sigtstp_handler(_signum, _frame):
    os.write(master_fd, b'\x1A')  # Send Ctrl-z.
signal.signal(signal.SIGTSTP, sigtstp_handler)

def sigchld_handler(_signum, _frame):
    process.wait()
    sys.exit(process.returncode)
signal.signal(signal.SIGCHLD, sigchld_handler)

while process.poll() is None:
    # Block until there is something to read or write.
    r, w, e = select.select([sys.stdin, master_fd], [], [])
    if sys.stdin in r:
        # Write to SSH.
        user_input = os.read(sys.stdin.fileno(), 4096)
        if not user_input:
            os.write(master_fd, b'\04')  # Send Ctrl-d.
        else:
            os.write(master_fd, user_input)
    if master_fd in r:
        # Read from SSH.
        data = os.read(master_fd, 4096)
        sys.stdout.write(data.decode())
        sys.stdout.flush()

我使用Python3.8.10在Ubuntu20.04对我的两个当地计算机和远程计算机。 这是一个自我教育的项目,所以我写的程序使用Python标准图书馆只。

linux pty python termios
2021-11-24 05:56:26
3
0

有一个不好的哈克你可以试试。 后ssh入机的尝试移除env变LS_COLORS

export LS_COLORS=none

这种改变将持续存在的会议。

2021-11-26 07:23:48

export LS_COLORS=none 没有任何影响的情况。
Flux

你有没有试过 pypi.org/project/termcolor
gettinggud

这是一个自我教育的项目,所以我写的程序使用Python标准图书馆只。
Flux

在这种情况下,所有我可以建议是添加一些过滤器显示/删除的颜色: 链接 链路. 好的项目顺便说一句!
gettinggud

什么是基本问题的原因?
Flux
0

在你的更改:

alias tmux="TERM=screen-256color-bce tmux"

在你的.tmux.conf:

set -g default-terminal "xterm-256color"

2021-11-30 14:19:56

垃圾仍然出现于两个tmux和vim。
Flux
0

尝试运行,你的脚本来自不同终端应用程序(优选定的违约),并看看如果你仍然有的问题。

2021-12-03 06:15:39

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................