# 為何要學習命令列模式
難度:☆未入門
2017台北市文山社大Python課到最後一節時,竟然還有同學問「為甚麼常叫出那個黑色框框來跑Python?」,這表示有些同學對程式執行的基本概念非常陌生。在這裡我稍為說明一下:
:::success
我的習慣是文章和程式源碼post上後,會不定期檢查修改,務求文字精練準確,內容完備。本文亦不例外,內容將不斷更新。
:::
就如同老師的解釋,那個黑色框框稱為命令列(Command line)視窗,我自己有時會叫作DOS window(其實已和DOS無關)。叫出這個視窗,除了老師教的打`cmd`之外,也可以從開始 -> 所有程式 -> 附屬應用程式 -> 「命令列提示字元」開啟。
為甚麼要叫出這個命令列視窗才能跑Python?答案是命令列的模式本來就是Windows的核心,不只是Python,事實上所有程式內部都是在這個模式上運行。也不只Windows,Linux基本上也是在命令列上執行所有功能和程式。
那又為甚麼平常我們都是在Windows的「桌面」或者從「開始」那裡用滑鼠「點選」圖示執行程式,很少在命令列上執行呢?這是因為Windows這個作業系統用了種種GUI(這老師有講噢,就是Graphical User Interfcae, 使用者圖形介面)的技術,將原來要在命令列上執行的程式,「包裝」成現在大家看到漂漂亮亮的樣子。這些GUI物件只是Windows作業系統的「殼」,是給使用者甜頭的「糖衣」,當然那不是毒藥。撕開糖衣,內部運作還是命令列。例如要跑Excel,一般我們都是點選桌面上的圖示,或點選「開始」的地方,其實也可以開一個命令列視窗,cd到Excel安裝的目錄,直接輸入'Excel'執行。
那何以Python沒有圖示可以點選,或者老師何以不採用GUI的模式教授Python,而偏偏要用命令列視窗的最原始方式呢?原因是:
1. Python的「直譯器(interpreter)」或稱「編譯器(compiler)」即Python.exe本來就是用命令列模式執行。compilerS一般都是命令列模式(在IDE上可以直接run,那也是將命令列模式的compiler包裝成GUI而已)。還有用來安裝openpyxl, wxpython, cx_Freeze等library的 pip.exe程式(此工具在安裝Python時順帶安裝),也是命令列版本。當然pip.exe可以包成GUI版,那不難,同學有興趣可以試寫一下。
2. 一般剛學習一種程式語言時,最好是focus在語言本身,而不要管那些GUI甚麼的,不然學習起來會失焦。命令列模式完全不涉及任何GUI,是比較理想的學習方法。事實上不只是Python,就算學習Java, C#等其他主流語言,如果老師循序漸進教學,大概都會從命令列模式教起吧。
所以,大家不要被GUI寵壞了,電腦內部的世界其實還是Command line喲。
###### tags: `command line` `命令列`
<style type="text/css">
/* @import url('https://fonts.googleapis.com/css?family=Inconsolata&display=swap');
*/
body {
}
.deepRed{
color: #8B0000;
}
.magentaBold {
color: #FF00FF;
font-weight: bold;
}
#b {
color: #00008B;
}
#r {
color: #8B0000;
}
.b {
color: #00008B;
}
#dk {
color: #1E90FF;
}
.t {
color: #FF6347;
font-size: 110%;
font-weight: bold;
}
.r {
color: red;
font-weight: bold;
}
#cg120 {
color: #008248;
font-weight: bold;
font-size: 120%;
}
.classA {
color: #66E141;
font-weight: bold;
font-size: 130%;
}
.classB {
color: #41C6E1;
font-weight: bold;
font-size: 130%;
}
.classC {
color: #E1B141;
font-weight: bold;
font-size: 130%;
}
.highlight {
color: red;
font-weight: bold;
font-size: 120%;
}
.PK {
color: #E6005C;
font-weight: bold;
font-size: 115%;
}
.FK {
color: #FF8C69;
font-weight: bold;
}
.dot {
color: #DAA520; //#8B4513;
font-weight: bold;
font-size: 125%;
}
.smalldot {
color: #4CDA21;
font-weight: bold;
font-size: 125%;
}
.hi {
color: #E6005C;
font-weight: bold;
//font-size: 115%;
}
.tableTitle {
color: #B22222; //000080
font-weight: bold;
text-align: center;
}
.HeYeLv {
color: #1A6840;
// #008248;
}
.YingWuLv {
color: #5BAE23;
}
.ShenZhuYue {
color: #3C69A6;
}
.HaiQing {
color: #22A2C3;
}
.lightRed {
color: #DC143C;
font-weight: bold;
}
.Bloody {
color: #7E2723;
}
.bloody180 {
color: #7E2723;
//A63732;
font-weight: bold;
font-size: 180%;
}
.Fei {
color: #D15B3A;
}
.DaHong {
color: #FF2121;
}
.QiuHaiTangHong {
color: #EC2B24;
}
.CuiLv {
color: #20A162;
}
.MuGuaHuang {
color: #F9C116;
}
.JieHuang {
color: #D9A40E;
}
.CangHuang {
color: #806332;
}
.ChiHong {
color: #C3272B;
}
.Red {
color: #FF0000;
}
.Magenta {
color: #FF00FF;
}
.lightBack {
background-color: #FFFF99;
}
.beginner {
/* color: #008248; */
color: #20A162;
font-weight: bold;
}
.adv {
/* color: red; */
/* color: #D9A40E; */
color: #FF4C00;
font-weight: bold;
}
.pro {
/* color: #A63732; */
color: #801DAE;
font-weight: bold;
}
.fonts {
font-family: Inconsolata, Consolas, Ubuntu Mono, mononoki, Iosevka, Fantasque Sans Mono, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, monospace, 華康細明體, 細明體, 微軟正黑體, 華康中圓體;
}
.font-Ubuntu {
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
}
.titleLev1 {
color: #2A2C4B;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 110%;
text-align: center;
}
.titleLev2 {
color: #B54C3F;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 120%;
}
.titleLev3 {
color: #22A2C3;
font-family: Ubuntu Mono, agave, Inconsolata, mononoki, Iosevka, Fantasque Sans Mono, Fira Code, Menlo, 華康中圓體, 微軟正黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 115%;
}
.titleLev4 {
color: #7E5E83;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 110%;
}
.titleLev5 {
color: #207F4C;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 108%;
}
.titleLev6 {
/* color: #5E878A; */
color: #C89B40;
font-family: Ubuntu Mono, Inconsolata, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Office Code Pro, Menlo, Consolas, monospace, 華康中圓體, 微軟正黑體, 文鼎新中黑, 華康中黑體, 華康細明體, 細明體;
font-weight: bold;
font-size: 108%;
}
.Walrus {
color: #FF2121;
font-family: Consolas, Ubuntu Mono, mononoki, Consolas, 細明體 ;
font-size: 1500%;
font-weight: bold;
}
.blockquote {
color: #1BA1E2;
font-size: 100%;
line-height: 18px;
}
.great {
color: #E50000;
/* font-weight: bold; */
}
.awful {
color: #008989;
/* font-weight: bold; */
}
.QA {
color: #1C3A90;
}
.myImg {
margin-left: auto;
margin-right:auto;
display: block;
}
.font500 {
font-weight: bold;
font-size: 500%;
}
.font300 {
font-weight: bold;
font-size: 300%;
}
.font200 {
font-weight: bold;
font-size: 200%;
}
.font150 {
font-weight: bold;
font-size: 150%;
}
.font130 {
font-weight: bold;
font-size: 130%;
}
.font125 {
font-weight: bold;
font-size: 125%;
}
.font120 {
font-weight: bold;
font-size: 120%;
}
.font115 {
font-size: 115%;
}
.font110 {
font-size: 110%;
}
.font108 {
font-size: 108%;
}
.font105 {
font-size: 105%;
}
.font100 {
font-size: 100%;
}
.font96 {
font-size: 96%;
}
.font94 {
font-size: 94%;
}
.font90 {
font-size: 90%;
}
.font88 {
font-size: 88%;
}
.font86 {
font-size: 86%;
}
.font82 {
font-size: 82%;
}
.font80 {
font-size: 80%;
}
.font75 {
font-size: 75%;
}
.font70 {
font-size: 70%;
}
.font65 {
font-size: 65%;
}
.font60 {
font-size: 60%;
}
.font50 {
font-size: 50%;
}
.trim {
margin-left: 0px;
margin-right: 0px;
broder: 0px;
padding: 0px;
}
.bold {
font-weight: bold;
}
.blur {
opacity: 0.20;
}
.statement {
color: #22A2C3;
}
.func {
color: #806332;
}
.str {
color: #EC2B24;
}
.filename {
color: #1A6840;
}
.codeFont {
font-size: 110%;
font-weight: bold;
}
.hiBold {
font-size: 110%;
font-weight: bold;
color: #EC2B24;
}
.markdown-body code { /* inline code */
font-family: Inconsolata, Consolas, Ubuntu Mono, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Menlo, Inconsolata, monospace;
font-size: 100%;
/* background-color: #EEEEEE; */
background-color: #E4E4E4;
}
.markdown-body pre code { /* code block */
font-family: Inconsolata, Consolas, Ubuntu Mono, Iosevka, Fantasque Sans Mono, mononoki, agave, Fira Code, ProggyVector, Menlo, Inconsolata, monospace;
font-size: 110%;
line-height: 16px;
}
.markdown-body {
max-width: 1500px;
}
.CodeMirror {
font-family: Inconsolata !important;
}
.borderlessTable {
border: 0;
}
.markdown-body table th, .markdown-body table td {
padding: 2px 3px 2px 5px !important;
// margin: 20px 30px 50px 10px !important;
border: 2px solid #ddd;
}
ul {
display: block;
/* list-style-type: disc; */
margin-block-start: 0.8em;
margin-block-end: 0.8em;
margin-inline-start: 0px;
margin-inline-end: 0px;
padding-inline-start: 15px;
padding: 0px;
}
.markdown-body ul, .markdown-body ol {
padding-left: 1em !important;
margin: 0 0 0 0;
}
</style>