天天看點

[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

光标位置 回憶上次内容

  • 上次我們研究的比較雜
  • 類型轉化
  • 進制轉化
  • 捕獲異常
  • 版本控制
  • 生成幫助文檔
  • 變量的常用類型
  • 變量的生命周期控制
  • 資料類型主要研究了兩個
  • 字元串
  • str
  • 整型數字
  • int
  • 字元串型 和 整型數字型變量
  • 是可以互相轉化的
  • 加法運算邏輯 會根據操作變量的不同 而不同
  • 整型變量的加法 是真的加
  • 字元串的加法 是字元串拼接
  • 字元串中有一些轉義字元
  • \n
  • \r
  • \t
  • 都是什麼意思來着??
  • 還有什麼沒見過的轉字元嗎??

回憶轉義

  • 轉義轉義
  • 轉化含義
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 下圖中hello的o
  • 為什麼消失了?
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • \b 是一個字元
  • 代表的含義是倒退
  • hello中的o
  • 被倒退符删除了
  • 如果不用chr
  • 想要直接打出上面的效果
  • 應該怎麼辦呢?

直接加起來

[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 想要用\b替換chr(8)
  • 程式報錯了
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 續行符(\)之後
  • 有不期待的字元
  • 想要獲得同樣的字元
  • 應該怎麼辦呢?

反斜杠的作用

  • \反斜杠(backslash) 在程式裡面的作用
  • 是續行符
  • line continuation character
  • 當把\反斜杠(backslash)放入雙引号裡面之後
  • \反斜杠 就是 轉義字元
  • escape character
  • 轉義字元
  • 在字元串中有特殊的含義
  • 可以和後面的字元一起
  • 構成轉義序列
  • escape sequence
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 在下圖中
  • \b 就是轉義序列
  • escape sequence
  • \b 這個轉義序列
  • 是由兩部分組成
  • \ 轉義字元
  • escape character
  • b 具體轉到的含義
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 這兩個字元的序列組合起來的意思
  • 就是倒退
  • backspace
  • 還有什麼轉義字元嗎?

換行

  • \n 這個轉義序列的意思是
  • line feed
  • 換行
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • \r 這個轉義序列的意思是
  • carriage return
  • 回車
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

| 轉義序列 | 中文含義 | 英文含義 | ascii序号 | | --- | --- | --- | --- | | \b | 倒退 | backspace | 8 | | \t | 制表鍵 | tab | 9 | | \n | 換行 | line feed | 10 | | \r | 回車 | carriage | 13 |

  • 可以看到更多的轉義字元嗎?

轉義 Escape

  • 回憶
  • 可以用八進制
  • \ooo
  • 用十六進制
  • \xhh
  • 來表示轉義字元
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 這就是全部轉義字元了嗎?

控制字元

  • 轉義字元
  • 具有一定的控制作用
  • 也被叫做 控制字元
  • control characters
  • 以下就是
  • ascii中的全部轉義字元
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 居然有轉義序列
  • 轉義之後的的含義是 escape

搜尋結果

  • 來回顧一下
  • \是轉義字元
  • 要和後面的字元一起構成轉義序列
  • \e是轉義序列
  • 也被稱作 逃逸字元
  • escape
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 這 逃逸字元 escape
  • 逃逸指的是什麼意思呢?
  • 我們來試試

動手實驗

  • 實踐證明
  • 直接使用\e是不行的
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 但是可以使用
  • \e 的 8進制形式
  • 用 \033 代替 \e
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 這樣可以控制輸出字元串的位置!!!

了解Escape

  • 真的可以逃逸出 目前輸出序列
  • 控制定位 再輸出
  • 從正常的輸出流
  • 逃逸到了 控制序列!!!
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

逃逸

  • 從标準輸出序列中逃逸出來
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 可以讓輸出
  • 從目前的字元串序列中
  • 退出(Escape) 出去
  • 後面的内容
  • 可就不是 輸出的文本 了
  • 而是 控制序列(Control Sequence)
  • [10;20H 控制 輸出位置
  • 在第10行第20列進行輸出
  • 那為什麼有控制序列呢?

緣起

  • 電傳打字機 輸出的顔色
  • 隻能通過 控制色帶(類似于墨盒)
  • 來控制 列印顔色的深淺
  • 是實體過程
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 早期的終端
  • 通過調節 顯示器亮度
  • 來改變顯示效果
  • 各個終端的 制造商
  • 都有 自己獨特的 控制字元
  • 這些特殊字元 是和 機器型号相關 的
  • 隻要 接受到 這些控制字元
  • 終端 就可以 調整輸出方式
  • 但是 并沒有統一标準

統一标準

  • 但是不同終端
  • 控制方式不同
  • 可能 造成顯示狀态 異常
  • 遠端終端輸出結果不可控
  • 需要一個關于控制字元的統一标準
  • 1964 年 ISO 646
  • 在歐洲以ECMA-6的形式存在
  • 後來被ANSI(American National Standards Institute)
  • 整合為工業标準
  • 叫做 ANSI X3.64
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • 這個字元集 是不是很像 ascii
  • 而且包括了 整個黑暗森林
  • 這套标準
  • 本來 在各種電傳打字機 被實作
  • 後來 在各種終端中 被實作
  • 現在 在terminal軟體 被實作

esc 鍵

  • Teletype Model ASR-33 終端鍵盤
  • 資料通信行業 最受歡迎的終端之一
  • 1963 年推出
  • 注意 shift 和 ctrl 都已經出現
  • Alt Mode 出現在第 1 列
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • \e這個轉義序列
  • 有了對應的按鍵嗎?
  • ALT MODE
  • 是用來 切換模式的 特殊按鍵
  • 這是當時的 esc 鍵 嗎?

總結

  • 這次了解了 新的轉義模式
  • \033 逃逸控制字元 escape
  • 這個字元 讓字元串 退出标準輸出流
  • 進行控制資訊的設定
  • 可以設定 光标輸出的位置
[oeasy]python0079_控制序列_光标位置設定_ESC_逃逸字元_CSI

添加圖檔注釋,不超過 140 字(可選)

  • ASR33中的ALT MODE
  • 是 今天的ESC鍵嗎????
  • 我們下次再說!
  • 藍橋->https://www.lanqiao.cn/courses/3584
  • github->https://github.com/overmind1980/oeasy-python-tutorial
  • gitee->https://gitee.com/overmind1980/oeasypython