φυβλαςのβλογ
phyblasのブログ



การใช้คำสั่ง python รันโปรแกรมในคอมมานด์ไลน์
เขียนเมื่อ 2019/07/05 23:23
แก้ไขล่าสุด 2024/02/22 10:43
หลายคนที่ฝึกเขียนภาษาไพธอนน่าจะชินกับการใช้ IDE (สิ่งแวดล้อมสำหรับการพัฒนาแบบเบ็ดเสร็จ) อย่าง IDLE, spyder, canopy

ปกติเวลาที่จะรันโปรแกรมภาษาไพธอน ถ้าหากใช้พวก IDE เมื่อเขียนโค้ดเสร็จก็กดปุ่มรันเพื่อรันได้เลย

แต่จริงๆโดยพื้นฐานแล้วโค้ดไพธอนสามารถรันผ่านคอมมานด์ไลน์

(คอมมานด์ไลน์คืออะไร ใช้ยังไง อ่านได้ใน https://phyblas.hinaboshi.com/20190124)

วิธีการรันไพธอนผ่านคอมมานด์ไลน์ก็คือแค่พิมพ์คำสั่ง python แล้วตามด้วยชื่อไฟล์ที่เขียนโค้ดไพธอนไว้
python ชื่อไฟล์.py


นอกจากนี้ใน mac หรือ linux มีวิธีตั้งให้รันโค้ดโดยตรงโดยพิมพ์แค่ชื่อไฟล์โค้ด รายละเอียดอ่านได้ใน https://phyblas.hinaboshi.com/20190108

ข้อเสียอย่างหนึ่งของการรันโค้ดไพธอนผ่านคอมมานด์ไลน์ก็คือ เมื่อรันเสร็จโปรแกรมจะสิ้นสุดการทำงานทันที ตัวแปรทั้งหมดจะหายไป ไม่สามารถทำงานต่อเนื่องได้

และอีกอย่างคือ การรันไพธอนผ่านคอมมานด์ไลน์จะละเลย PYTHONSTARTUP ที่เอาไว้ตั้งโค้ดที่จะรันตอนเริ่มต้นไพธอน ด้วยวิธีดังที่แนะนำไปใน https://phyblas.hinaboshi.com/20190107

หากพิมพ์แค่ python เฉยๆ ไม่ได้ตามด้วยชื่อไฟล์ แบบนี้จะเป็นการเปิดเชลโต้ตอบของไพธอนขึ้นมา
python



ป้อนค่าเพิ่มเติมเข้าไปให้โปรแกรมเวลารัน

ข้อดีของการรันไพธอนผ่านคอมมานด์ไลน์ก็คือ สามารถป้อนค่าเข้าไปให้โปรแกรม นอกเหนือจากที่เขียนอยู่ในโค้ด

ปกติแล้วเวลาที่รันไฟล์ ชื่อไฟล์ที่รันจะถูกเก็บอยู่ในตัวแปร sys.argv ซึ่งอยู่ในมอดูล sys (ต้อง import มาถึงใช้ได้)

เช่นลองสร้างไฟล์ขึ้น
# p.py
import sys
print(sys.argv)

บันทึกแล้วพิมพ์รันในคอมมานด์ไลน์
python p.py
# ได้ ['p.py']

จะได้ว่า sys.argv เป็นลิสต์ที่มีสมาชิกอยู่ตัวเดียวคือชื่อไฟล์

แต่ว่าถ้าเราลองพิมพ์หาค่า sys.argv ดูในเชลโต้ตอบจะได้ลิสต์เปล่า
import sys
print(sys.argv)
# ได้ ['']

ที่เป็นแบบนี้เพราะว่าค่านี้จะมีเฉพาะเมื่อสั่งรันไฟล์

แต่ว่าหากลองไม่ใช่แค่พิมพ์ชื่อไฟล์เฉยๆ แต่ใส่อะไรต่อท้ายลงไป
python p.py ชิพกะเดลนี่สองพี่น้องขายของในคลอง
# ได้ ['p.py', 'ชิพกะเดลนี่สองพี่น้องขายของในคลอง']

จะเห็นว่าสิ่งที่ใส่ไปก็จะปรากฏเป็นค่าตัวที่สองใน sys.argv

ถ้าเว้นวรรคก็จะแยกเป็นหลายตัว
python p.py ชิพ กะ เดล
# ได้ ['p.py', 'ชิพ', 'กะ', 'เดล']

ด้วยความสามารถตรงนี้ ทำให้สามารถเขียนโปรแกรมที่ให้ผลต่างออกไปในการรันแต่ละครั้งโดยที่ไม่ต้องไปแก้ตัวโค้ดได้

ตัวอย่างเช่น โปรแกรมที่ให้บวกเลขทุกตัวที่ป้อนเข้าไปอาจเขียนแบบนี้
# บวกเลข.py
import sys
print(sum(map(int,sys.argv[1:])))

python บวกเลข.py 5 6 1
# ได้ 12

เอาไปประยุกต์ใช้งานต่างๆได้มากมาย



ตัวเลือกเสริมของคำสั่ง python

เวลาใช้คำสั่ง python ในคอมมานด์ไลน์ ถ้าเติมตัวเลือกเสริมต่อเข้าไปจะทำให้ได้ผลต่างกันออกไป ทำอะไรต่างๆได้

ในที่นี้จะยกส่วนนึงมาให้ดู

เริ่มจาก ถ้าอยากได้ข้อมูลว่าคำสั่งไหนทำอะไรบ้างให้เติม -h หรือ --help
python -h

หรือ
python --help

หากอยากรู้เวอร์ชันของไพธอนที่ใช้อยู่สามารถเติม -V หรือ --version
python -V
# ได้ Python 3.7.1

หรือ
python --version
# ได้ Python 3.7.1

ระวังอย่าสับสนกับ -v เพราะตัวพิมพ์เล็กพิมพ์ใหญ่มีผลต่างกันหมด

ตัวเลือก -v นี้หมายถึงว่าให้เวลารันไพธอนมีการป้อนค่าตัวหนังสือบอกรายละเอียดออกมาเพิ่มมากกว่าปกติ เช่นเวลาเริ่มการทำงานไพธอนและสิ้นสุดการทำงาน
python -v

ในทางกลับกัน ตัวเลือก -q จะทำให้ปรากฏข้อความออกมาน้อยลง คือจะไม่แสดงเวอร์ชันและคำอธิบายลิขสิทธิ์ซึ่งมักจะโผล่ขึ้นมาทุกครั้งเวลาเปิดเชลโต้ตอบ
python -q

หากต้องการรันไพธอนโดยละเลยพวกตัวแปรสภาพแวดล้อมต่างๆที่เกี่ยวกับไพธอน เช่น PYTHONPATH ให้ใส่ -E
python -E

หากต้องการรันโค้ดไพธอนโดยไม่ต้องเขียนลงไฟล์ให้ใส่ตัวเลือก -c แล้วต่อด้วยโค้ดที่ต้องการ
python -c "print(1+2)"
# ได้ 3

ตัวสุดท้ายที่จะแนะนำคือ -B

ปกติเวลาที่รันมอดูลที่สร้างขึ้นมาใหม่เป็นครั้งแรกจะมีการสร้าง .pyc เป็นการทำ cache มอดูลไว้ รายละเอียดอ่านได้ที่ https://phyblas.hinaboshi.com/tsuchinoko34

หากใส่ตัวเลือก -B จะทำให้ไม่มีการสร้างไฟล์ .pyc โดยอัตโนมัติเวลาที่ทำการ import มอดูล

มีผลทั้งเวลารันเชลโต้ตอบ (ไม่ใส่ชื่อไฟล์) และเวลารันไฟล์
python -B

python -B ชื่อไฟล์.py

นอกจากนี้ยังมีตัวเลือกเสริมอื่นๆอีกมากมาย ที่เหลือพิมพ์ python -h ดูได้



ใช้ ipython

หากใครมี ipython ก็สามารถพิมพ์ว่า ipython ในคอมมานด์ไลน์เพื่อเปิดเชลโต้ตอบในโหมดของ ipython ในนั้นได้
ipython

คำสั่ง ipython ยังใช้รันไฟล์ได้
ipython ชื่อไฟล์.py

ส่วนพวกตัวเลือกเสริมใน ipython จะต่างไปจาก python ธรรมดา ตัวเลือกเสริมมีเยอะกว่ามาก

รายละเอียดสามารถดูได้ด้วยการใส่ตัวเลือกเสริม -h หรือ --help เช่นกัน
ipython -h

หรือ
ipython --help


-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python
-- คอมพิวเตอร์ >> shell

ไม่อนุญาตให้นำเนื้อหาของบทความไปลงที่อื่นโดยไม่ได้ขออนุญาตโดยเด็ดขาด หากต้องการนำบางส่วนไปลงสามารถทำได้โดยต้องไม่ใช่การก๊อปแปะแต่ให้เปลี่ยนคำพูดเป็นของตัวเอง หรือไม่ก็เขียนในลักษณะการยกข้อความอ้างอิง และไม่ว่ากรณีไหนก็ตาม ต้องให้เครดิตพร้อมใส่ลิงก์ของทุกบทความที่มีการใช้เนื้อหาเสมอ

目次

日本による名言集
モジュール
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
機械学習
-- ニューラル
     ネットワーク
javascript
モンゴル語
言語学
maya
確率論
日本での日記
中国での日記
-- 北京での日記
-- 香港での日記
-- 澳門での日記
台灣での日記
北欧での日記
他の国での日記
qiita
その他の記事

記事の類別



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  記事を検索

  おすすめの記事

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

ไทย

日本語

中文