φυβλαςのβλογ
บล็อกของ phyblas



การใช้คำสั่ง python รันโปรแกรมในคอมมานด์ไลน์
เขียนเมื่อ 2019/07/05 23:23
หลายคนที่ฝึกเขียนภาษาไพธอนน่าจะชินกับการใช้ 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

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

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
python
-- numpy
-- matplotlib

-- pandas
-- pytorch
maya
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
เรียนภาษาจีน
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



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

  ค้นหาบทความ

  บทความแนะนำ

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

ไทย

日本語

中文