คำถามที่ค่อนข้างง่าย: ใน Linux ทำไม Python ต้องการบรรทัด
#!/usr/bin/python
ที่จุดเริ่มต้นของไฟล์หลามตั้งแต่ Windows ไม่?
มันทำอะไร? 'ทำให้คำอธิบาย "Links to Python" ค่อนข้างคลุมเครือ ...
python myscript.py
แทน
คำถามที่ค่อนข้างง่าย: ใน Linux ทำไม Python ต้องการบรรทัด
#!/usr/bin/python
ที่จุดเริ่มต้นของไฟล์หลามตั้งแต่ Windows ไม่?
มันทำอะไร? 'ทำให้คำอธิบาย "Links to Python" ค่อนข้างคลุมเครือ ...
python myscript.py
แทน
คำตอบ:
Pythonไม่มีข้อกำหนดพิเศษใด ๆ บน Linux เป็นตัวโหลดโปรแกรมบน Unix / Linux ที่ใช้บรรทัด "shebang" ตามที่เรียกว่า นี่คือคุณลักษณะจริง ๆ มากกว่าข้อ จำกัด แต่เราจะไปถึงในเวลาไม่นาน หน้า Wiki ใน "shebang" มีรายละเอียดเพิ่มเติมแต่ฉันจะพยายามให้ภาพรวมรวมถึงการเปรียบเทียบกับ Windows ที่นี่
อันดับแรกให้ดูที่สถานการณ์บน Windows:
.
.py
.py
ควรเปิดไฟล์โดยใช้แอปพลิเคชั่น Python ที่เพิ่งติดตั้งใหม่(เช่นตัวแปล Python).exe
และ.bat
ไฟล์จะถูกเรียกใช้งานเป็นสคริปต์แบตช์ของ Windows.py
ไฟล์โดยใช้python.exe
ก็ควรเปิดให้กับโปรแกรมอื่น ๆ notepad.exe
บางอย่างเช่นการแก้ไขข้อความ
python <scriptname>.py
(หรือเขียน.bat
ไฟล์เพื่อทำสิ่งนี้ให้คุณ)ตอนนี้จะเกิดอะไรขึ้นถ้ามีบรรทัด shebang ( #!/usr/bin/python
หรือ#!/usr/bin/env python
) อยู่ด้านบนของสคริปต์ Python ทีนี้เนื่องจาก#
เป็นบรรทัดความคิดเห็นใน Python ล่าม Python จะไม่สนใจมัน นี่คือเหตุผลหนึ่งว่าทำไมภาษาสคริปต์ส่วนใหญ่ที่ใช้ในโลก Unix / Linux ใช้#
เพื่อเริ่มบรรทัดความคิดเห็น
ดังนั้นจึงเป็นการทำให้เข้าใจผิดเล็กน้อยที่จะบอกว่า Windows "ไม่จำเป็นต้อง" #!
บรรทัด; Windows ไม่เห็น#!
บรรทัดและในความเป็นจริงต้องอาศัยไฟล์นามสกุลที่จะบอกว่าสิ่งที่จะทำ นี่เป็นข้อเสียสองประการ:
.py
ท้ายเพื่อให้รู้จักโดยอัตโนมัติ.py
ประเภทไฟล์ Windows จะไม่เรียกใช้สคริปต์เหล่านั้นกับ Python อีกต่อไปโดยอัตโนมัติ โปรดทราบว่าสิ่งนี้สามารถทำได้โดยไม่ได้ตั้งใจตอนนี้มาดูกันว่า Unix / Linux เปิดตัวสคริปต์:
สิ่งแรกที่ควรทราบคือ Unix / Linux ซึ่งแตกต่างจาก Windows ไม่ได้พยายาม "เปิด" สคริปต์ Python โดยใช้โปรแกรมเฉพาะอย่างน้อยแนวคิด ระบบปฏิบัติการรู้ว่าสคริปต์เป็นสิ่งที่สามารถเรียกใช้งานได้เนื่องจากสิ่งที่เรียกว่า "execute bit" (ซึ่งอยู่นอกขอบเขตของคำตอบนี้) ดังนั้นถ้าคุณตั้งใจพิมพ์#!/usr/bin/pthon
แทน#!/usr/bin/python
คุณจะได้รับข้อผิดพลาดที่มีข้อความนี้:
/usr/bin/pthon: bad interpreter: No such file or directory.
คำว่า "ล่าม" ช่วยให้เราทราบเกี่ยวกับบทบาทของบรรทัด Shebang (แม้ว่าในทางเทคนิคแล้วโปรแกรมที่ระบุอาจเป็นอย่างอื่นที่ไม่ใช่ล่ามเช่นcat
หรือโปรแกรมแก้ไขข้อความ) เมื่อคุณพยายามเรียกใช้ไฟล์นี่คือสิ่งที่เกิดขึ้น:
#!
นั้นโหลดเดอร์จะตีความส่วนที่เหลือของบรรทัด Shebang (ไม่รวม Shebang เอง) เป็นคำสั่งเพื่อเปิดตัวล่ามที่จะเรียกใช้เนื้อหาไฟล์เป็นสคริปต์นี่เป็นข้อดีสองประการ:
โปรดทราบว่าในที่สุด Unix / Linux ไม่ ต้องการบรรทัด shebang เพื่อเรียกใช้สคริปต์ Python โปรดจำไว้ว่าสาย shebang ทั้งหมดที่ใช้งานจริงนั้นอนุญาตให้โปรแกรมโหลดเดอร์เลือกล่าม แต่เช่นเดียวกับใน Windows สิ่งนี้สามารถทำได้ด้วยตนเอง:
python <myscript>
.py2
และ.py3
ส่วนขยายสำหรับสคริปต์ Python 2 / Python 3 ได้อย่างง่ายดาย ดังนั้นทั้ง Linux (+ x บิต) และ Windows (นามสกุลไฟล์) จึงจำเป็นต้องมีเมทาดาทาในระบบไฟล์ ข้อแตกต่างหลักคือ + x บิตจะหายไปในการขนส่งได้ง่ายขึ้น นี่ไม่จำเป็นต้องเป็นข้อเสีย
/usr/bin/i686/python
และ/usr/bin/amd64/python
? ที่สมบูรณ์แบบที่เหมาะสม /usr/bin/python
แต่จะแบ่งสคริปต์หลามที่มีสมมติฐานฮาร์ดโค้ดบน ตัวเลือกของล่ามไม่ใช่ทางเลือกของผู้เขียนสคริปต์ แต่เป็นผู้ใช้สคริปต์ผู้เขียนสคริปต์เท่านั้นที่จะเลือกภาษา (ภาษาถิ่น)
/usr/bin/env
มีไว้สำหรับพร้อมกับสคริปต์การตั้งค่า env Windows รุ่นนี้คืออะไร เรียกใช้regedit
สคริปต์ทันทีก่อนที่คุณจะเปิด.py
ไฟล์เพื่อให้แน่ใจว่าคุณได้รับล่ามที่คุณต้องการ?
บรรทัดที่คุณระบุถูกใช้เพื่อบอกคอมพิวเตอร์ว่าโปรแกรม / ล่ามจะใช้อะไรเมื่อเรียกใช้ไฟล์ / สคริปต์โดยตรงและข้อโต้แย้งใด ๆ ที่ควรส่งผ่านไปยังโปรแกรมนั้นเมื่อสคริปต์ทำงาน อย่างไรก็ตามนี่ไม่ใช่ข้อกำหนดของPythonแต่เป็นข้อกำหนดของ linux kernel / system หากคุณต้องการรันสคริปต์โดยตรง (และไม่ส่งให้ Python โดยใช้ไวยากรณ์ด้านล่าง)
มันไม่จำเป็นถ้าคุณจะรันpython script.py
หรือคล้ายกัน จำเป็นเฉพาะเมื่อคุณต้องการเรียกใช้สคริปต์ / ไฟล์โดยตรงโดยไม่ต้องให้ล่ามใช้ (เช่นpython
)
สำหรับสคริปต์ Bash มันจะมีดังนี้:
#!/bin/bash [optional Bash arguments]
# Bash script code here
...
exit 0;
สิ่งนี้จะบ่งชี้ถึงระบบว่าเมื่อรันสิ่งนี้ควรรันผ่าน/bin/bash
ซึ่งเป็นหนึ่งในภาษา shells / shell-script บนระบบ
สำหรับรหัส Python ที่นี่คุณจะต้องการให้ไฟล์ที่เรียกใช้ทำงานได้ผ่าน Python ดังนั้นคุณจึงบอกได้เลยว่าคุณต้องการล่ามแปลภาษาอะไร
#!/usr/bin/python [optional Python arguments]
# Python code here
...
exit()
สิ่งนี้เช่นเดียวกับ Bash บ่งชี้ว่า/usr/bin/python
ควรใช้งาน (ซึ่งน่าจะเป็น Python 2 หรือ Python 3 ขึ้นอยู่กับการกำหนดค่าระบบของคุณเอง)
ด้วยวิธีนี้คุณสามารถเรียกใช้./filename.py
หรือ./executable
หรือ./scripttorun
โดยตรง
หากไม่มีบรรทัดนั้นที่จุดเริ่มต้นและสมมติว่าคุณได้ตั้งค่าไฟล์ / สคริปต์ให้สามารถเรียกใช้งานได้และสมมติว่าคุณทำงานกับสคริปต์ Python คุณจะต้องเรียกใช้python filename.py
หรือคล้ายกันหากคุณไม่มี#!/usr/bin/python
บรรทัด (สำหรับสคริปต์ Bash คุณต้องทำbash script.sh
หรือคล้ายกับสคริปต์ / ภาษาอื่น ๆ เช่น Perl, Ruby และอื่น ๆ )
การเน้นไวยากรณ์ด้านบนเป็นเฉพาะภาษาในแต่ละส่วนแม้ว่าจะไม่สำคัญ
#!/bin/bash -x
, #!/usr/bin/perl -lan
ฯลฯ )
/usr/bin/env python
เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง
env
คืออะไร แต่ปัญหาดูเหมือนจะไม่เป็นจำนวนของข้อโต้แย้ง: #!/usr/bin/perl -l -a -n
มีสามข้อโต้แย้ง แต่มันทำงานได้ แม้ว่าอีกครั้งฉันจะไม่สามารถคลี่คลายปัญหาที่แน่นอนได้
./
เมื่อชัดเจนเรียกล่ามกับสคริปต์ที่เป็นอาร์กิวเมนต์มีเหตุผลที่จะมีการเริ่มต้นหลังไม่มี ในคำอื่น ๆ เพียงpython filename.py
หรือbash script.sh
จะทำงานได้ดี เหตุผลเดียวที่จะรวม./
อยู่ในชื่อคำสั่งเมื่อคุณต้องการบอกเชลล์ไม่ให้ค้นหา$PATH
(ซึ่งอาจจะไม่พบไฟล์ในไดเรกทอรีปัจจุบัน) แต่ใช้เส้นทางที่คุณระบุตามที่เป็น แต่นั่นไม่ได้ใช้กับคำสั่งอาร์กิวเมนต์
env
รับอาร์กิวเมนต์ที่เหลือจากเคอร์เนล พวกเขาทั้งหมดสามารถสันนิษฐานว่าเป็นอาร์กิวเมนต์ขนาดใหญ่หนึ่งโดยไม่มีการแยกตามพื้นที่ ขออภัยที่ประกบฉันจำรายละเอียดของสิ่งนี้ไม่ได้อีกต่อไป
เส้น:
#!/usr/bin/python
เรียกว่า 'shebang' และระบุเส้นทางไปยังตัวแปลไบนารีที่จะใช้ในการแปลคำสั่งที่เหลือในไฟล์ โดยปกติจะเป็นบรรทัดแรกของสคริปต์
ดังนั้นบรรทัด#!/usr/bin/python
แสดงให้เห็นว่าเนื้อหาของแฟ้มจะถูกตีความโดยไบนารีตั้งอยู่ที่python
/usr/bin/python
โปรดทราบว่าบรรทัด shebang จะถูกวิเคราะห์โดยเคอร์เนลจากนั้นสคริปต์จะถูกเรียกใช้เป็นอาร์กิวเมนต์ในที่สุด:
python script_name
ในทำนองเดียวกันในกรณีของ#!/bin/bash
:
bash script_name
shebang
ฉันไม่คิดว่าฉันเคยเห็นในยัติภังค์ เนื่องจากคำว่ามาจาก "แฮช" และ "ปัง" การสะกดของคุณไม่ชัดเจนมากเนื่องจากดูเหมือนว่าเป็นการรวมกันของ"เธอ"และ "ปัง"
hashbang
( #
= "hash") หรือshebang
( #
= "sharp") ขึ้นอยู่กับว่าคุณตั้งชื่อ#
ตัวละครอย่างไร อย่างไรก็ตามshebang
เป็นเรื่องธรรมดามากขึ้น @KyleStrand
ในทางเทคนิคแล้วมันไม่ต้องการมัน มันต้องการเส้นทางสู่สภาพแวดล้อมที่สคริปต์ของคุณดำเนินการ สคริปต์ในอนาคตของคุณน่าจะดีกว่าที่จะรวม / usr / bin / env จากนั้นระบุ python ผู้รับอนุญาตนี้สคริปต์ของคุณทำงานในสภาพแวดล้อมของหลามไม่ว่าจะติดตั้งที่ใดก็ตาม คุณต้องการทำสิ่งนี้ด้วยเหตุผลด้านความเข้ากันได้คุณไม่แน่ใจว่าบุคคลต่อไปที่คุณแชร์รหัสด้วยจะมีการติดตั้ง python ใน usr / bin / python หรือว่าพวกเขาจะมีสิทธิ์ในไฟล์ระบบเหล่านั้น
นี่คือที่คล้ายกัน Q & A จากสแตกล้น
สิ่งที่ดูเหมือนในสคริปต์ของคุณคือ:
#!/usr/bin/env python
ฉันเห็นปัญหาบางอย่างเกี่ยวกับวิธีการระบุ python3 นี่คือวิธีที่จะทำ:
#!/usr/bin/env python3
ใน Linux Python อาจหรืออาจไม่ต้องการ#!
บรรทัด (shebang) ขึ้นอยู่กับวิธีจัดการรหัส Python ไม่ว่าจะเป็นการเรียกใช้รหัสในโหมดโต้ตอบ Python หรือสคริปต์ Python
Python mode modeอนุญาตให้ผู้ใช้พิมพ์และรัน Python codes โดยตรงซึ่งไม่จำเป็นต้องใช้สาย shebang ในการเรียกใช้โหมดโต้ตอบให้เปิดเทอร์มินัลแล้วพิมพ์python
สำหรับ Python 2.X หรือpython3
Python 3.X
$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ python3
Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
สคริปต์ Pythonอนุญาตให้ผู้ใช้เขียนและบันทึกรหัส Python ในไฟล์ข้อความธรรมดาจากนั้นเรียกใช้รหัสในภายหลัง สิ่งนี้อาจจะหรืออาจไม่จำเป็นต้องใช้สาย Shebang อย่างไรก็ตามมีเหตุผลสองประการที่ทราบว่าจำเป็นต้องใช้บรรทัด shebang สำหรับการใช้สคริปต์ Python ใน Linux
เพื่อเรียกใช้โค้ด Python ในสคริปต์ที่สามารถเรียกทำงานได้เช่นกำหนดว่าควรรันโค้ดอย่างไรและใช้ล่ามอะไร
การเรียกใช้รหัส Python ที่เกี่ยวข้องกับ Python รุ่นเฉพาะเช่นรหัสการทำงานที่เข้ากันได้กับ Python 2.X หรือ Python 3.X เท่านั้น
ฝึกฝนกับสคริปต์ Python
ด้านล่างนี้เป็นรายการและเนื้อหาของไฟล์ที่ฉันเคยใช้เพื่อแสดงกรณีที่#!
จำเป็นต้องใช้บรรทัด (shebang) หรือไม่จำเป็น
$ ls -ln *.py
-rw-rw-r-- 1 1000 1000 94 Dec 14 18:37 hello1.py
-rwxrwxr-x 1 1000 1000 116 Dec 14 18:37 hello2e.py
-rw-rw-r-- 1 1000 1000 116 Dec 14 18:37 hello2.py
-rwxrwxr-x 1 1000 1000 117 Dec 14 18:37 hello3e.py
-rwxrwxr-x 1 1000 1000 120 Dec 14 18:37 hello3m.py
-rw-rw-r-- 1 1000 1000 117 Dec 14 18:37 hello3.py
$ file *.py
hello1.py: ASCII text
hello2e.py: Python script, ASCII text executable
hello2.py: Python script, ASCII text executable
hello3e.py: Python script, ASCII text executable
hello3m.py: Python script, UTF-8 Unicode (with BOM) text executable
hello3.py: Python script, ASCII text executable
hello1.py
มีซอร์สโค้ดเท่านั้น
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2.py
มีซอร์สโค้ดและบรรทัด shebang
#!/usr/bin/env python
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2e.py
มีเหมือนhello2.py
และทำให้ปฏิบัติการ
hello3.py
มีเช่นเดียวกับการhello2.py
ยกเว้นมันจะปรับตัวให้เข้าทำงานกับงูหลาม 3 #!/usr/bin/env python3
โดยการเปลี่ยนชื่อสายแรกที่จะ
hello3e.py
มีเหมือนhello3.py
และทำให้ปฏิบัติการ
hello3m.py
มีเหมือนกับhello3.py
และสร้างไฟล์สั่งการยกเว้นบันทึกด้วยWrite Unicode BOM
ตัวเลือกในโปรแกรมแก้ไขข้อความเช่น Mousepad
นอกเหนือจากจุดนี้ผู้ใช้จะมีสองวิธีในการเรียกใช้สคริปต์ Python ทั้งสองวิธีได้รับการสาธิตดังนี้
วิธีที่ 1: เรียกใช้ด้วยโปรแกรม Python
ด้านล่างนี้เป็นคำสั่งและเอาต์พุตเมื่อใช้งานซอร์สโค้ดด้วย Python 2 และ Python 3
$ python hello1.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ python3 hello1.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Python ทั้งสองรุ่นสามารถเรียกใช้สคริปต์ได้สำเร็จ ดังนั้นบรรทัด shebang จึงไม่จำเป็นเมื่อเรียกใช้สคริปต์ Python ผ่านทางpython
หรือpython3
คำสั่ง
วิธีที่ 2: เรียกใช้เป็นสคริปต์ Python
ด้านล่างนี้เป็นคำสั่งและเอาท์พุทเมื่อเรียกใช้ซอร์สโค้ดด้วยบรรทัด shebang ซึ่งปรับให้เข้ากับทั้ง Python 2 และ Python 3 รวมถึงกรณีที่ไม่สามารถเรียกใช้งานได้และปฏิบัติการได้
$ ./hello1.py
bash: ./hello1.py: Permission denied
$ ./hello2.py
bash: ./hello2.py: Permission denied
$ ./hello3.py
bash: ./hello3.py: Permission denied
$ ./hello2e.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ ./hello3e.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
สคริปต์สามตัวแรกล้มเหลวเนื่องจากสคริปต์เหล่านี้ไม่สามารถเรียกใช้งานได้โดยไม่คำนึงถึงบรรทัด Shebang หรือไม่ (สำหรับหลักฐานสนับสนุนดูตัวอย่างเพิ่มเติมด้านล่าง) สคริปต์สองสคริปต์สุดท้ายมีบรรทัด shebang และสามารถเรียกใช้งานได้
เห็นได้ชัดว่าสคริปต์ที่ถูกทำให้สามารถเรียกใช้งานได้นั้นไม่มีประโยชน์หากไม่มีบรรทัด shebang ดังนั้นจึงจำเป็นต้องมีบรรทัด shebang และสคริปต์จะต้องสามารถเรียกใช้งานได้เมื่อเรียกใช้รหัส Python ในสคริปต์ที่สามารถเรียกทำงานได้
เมื่อ shebang ไม่ทำงาน
ในตัวอย่างที่เตรียมและทดสอบของฉันการเรียกใช้hello3m.py
เป็นสคริปต์ที่ปฏิบัติการได้ล้มเหลวและส่งคืนข้อผิดพลาด
$ ./hello3m.py
./hello3m.py: line 1: #!/usr/bin/env: No such file or directory
นี่เป็นข้อ จำกัดที่ทราบว่า shebang ใช้งานไม่ได้หรือไม่ถูกต้อง เมื่อไฟล์ถูกบันทึกเป็น Unicode BOM (Byte Order Mark) มันจะล้มเหลวในการทำงานตามปกติเป็นสคริปต์ Python ที่สามารถเรียกใช้งานได้
ตัวอย่างเพิ่มเติม
ตัวอย่างเพิ่มเติมนี้จะถือว่าเป็นหลักฐานสนับสนุนเท่านั้น ผู้ใช้ควรหลีกเลี่ยงการรันตัวอย่างนี้แม้ว่าผลลัพธ์จะไม่เป็นอันตราย
ฉันสร้างไฟล์อื่นที่เรียกว่าhello1e.py
ซึ่งมีไฟล์เดียวกันhello1.py
และทำให้สามารถเรียกใช้งานได้ การรันสคริปต์นี้ส่งคืนข้อผิดพลาดทางไวยากรณ์
$ ./hello1e.py
./hello1e.py: line 2: syntax error near unexpected token `"Hello from Python %s\n"'
./hello1e.py: line 2: `sys.stdout.write("Hello from Python %s\n" % (sys.version,))'
เมื่อเรียกใช้สคริปต์นี้ในตอนแรกเคอร์เซอร์ของเมาส์จะถูกเปลี่ยนเป็นเครื่องหมายบวกและไม่ทำอะไรเลย ข้อผิดพลาดทางไวยากรณ์จะไม่ปรากฏจนกว่าฉันจะคลิกบนหน้าต่างเดสก์ท็อปหรือเทอร์มินัล จากนั้นสคริปต์นี้จะสร้างsys
ไฟล์ในไดเรกทอรีเดียวกับสคริปต์
$ file sys
sys: PostScript document text conforming DSC level 3.0, Level 1
sys
ไฟล์ที่ได้รับการระบุว่าเป็นไฟล์ PostScript โดยไม่มีนามสกุลไฟล์ ไฟล์นี้สามารถเปิดได้ในโปรแกรมดูเอกสารเช่น Evince และไฟล์นั้นมีภาพหน้าจอของหน้าต่างที่ฉันคลิกไปก่อนหน้านี้ จากประสบการณ์ของฉันไฟล์อาจมีขนาดใหญ่ถึงไม่กี่เมกะไบต์
ต้องมีบรรทัด shebang อีกครั้งและสคริปต์จะต้องสามารถเรียกใช้งานได้เมื่อเรียกใช้สคริปต์ Python เป็นสคริปต์ที่สามารถเรียกทำงานได้ มิฉะนั้นสคริปต์จะทำงานผิดปกติตามที่อธิบายไว้ข้างต้น
หมายเหตุเพิ่มเติม
คำว่า "made executable" หรือ "ต้องปฏิบัติการได้" หมายถึงสิทธิ์ในการเรียกใช้สคริปต์ สิ่งนี้ทำได้โดยเรียกใช้chmod +x FILENAME
คำสั่งในเทอร์มินัลหรือโดยการตรวจสอบตัวเลือก "อนุญาตให้ไฟล์นี้ทำงานเป็นโปรแกรม" หรือบางอย่างที่คล้ายกันในหน้าต่างคุณสมบัติภายในตัวจัดการไฟล์
ในขณะที่คำตอบอื่น ๆ ที่มีอยู่ครอบคลุมเกือบทุกอย่างคำตอบนี้ใช้แนวทางที่แตกต่างกันโดยใช้ตัวอย่างการปฏิบัติเพื่ออธิบายเรื่องนี้ ไวยากรณ์ของรหัสถูกเขียนขึ้นด้วยความระมัดระวังเช่นตัวอย่างที่สามารถรันด้วย Python 2 หรือ Python 3 ตามที่เป็นอยู่
รหัส Python ได้รับการดัดแปลงจากการใช้ Python บน Windowsและการใช้ Python บนแพลตฟอร์ม Unixด้วยโค้ดหนึ่งบรรทัดเพิ่มเติมของ "Hello, World!" ที่แพร่หลาย โครงการ
รหัสและคำสั่งทั้งหมดได้รับการทดสอบอย่างสมบูรณ์และใช้งานได้ในระบบ Xubuntu 14.04 ซึ่งติดตั้ง Python 2.7 และ Python 3.4 เป็นค่าเริ่มต้น
ก็หมายความว่าเมื่อแฟ้มนั้นจะถูกดำเนินการเครื่องคอมพิวเตอร์ของคุณรู้ว่าจะดำเนินการได้กับโปรแกรมว่าเป็นวิธีที่คุณบอกมันนอกเหนือจากภาษาอื่นเช่นทุบตีที่คุณจะทำอย่างไร/usr/bin/python
#!/bin/bash
นี่คือเพื่อให้คุณสามารถเรียกใช้:
./[file-to-execute]
และจะรู้ว่าไฟล์ใดที่จะเรียกใช้งานด้วยแทนที่จะต้องระบุด้วยตัวคุณเอง:
python ./[file-to-execute].py
#!
ส่วนหนึ่งจะถูกตัดสินกันทั่วไปเพื่อเป็นshebangหรือปังกระทืบ
หากคุณติดตั้ง Python หลายรุ่น/usr/bin/env
จะมั่นใจได้ว่าล่ามที่ใช้นั้นเป็นรุ่นแรกในสภาพแวดล้อมของ$PATH
คุณ ทางเลือกอื่นคือการ hardcode บางอย่างเช่น#!/usr/bin/python
;
ใน Unix ไฟล์ที่สามารถเรียกใช้งานได้ซึ่งหมายถึงการตีความสามารถระบุได้ว่าล่ามที่จะใช้โดย#!
เริ่มต้นที่บรรทัดแรกแล้วตามด้วยล่าม
กฎนี้ใช้ได้กับระบบที่ใช้ UNIX เท่านั้น
มีประโยชน์สำหรับระบบปฏิบัติการเช่น Linux ที่ Python 2.x ยังคงเป็นมาตรฐาน แต่คนส่วนใหญ่ดาวน์โหลด 3.x
2.x จะทำงานตามค่าเริ่มต้น ดังนั้นรหัส 3.x ของฉันฉันนำหน้าด้วย #! / usr / bin / env python3 เพื่อให้ 3.x รันโค้ด ฉันยังสามารถระบุการแก้ไขเล็กน้อย (python 3.xyz) หากฉันเลือกที่จะมีรุ่นเบต้าหรือรุ่นที่เก่ากว่าเล็กน้อย
.
) เพื่อพิจารณาว่าเป็นไฟล์ประเภทใด แม้แต่ Windows ก็กำลังเคลื่อนห่างจากสิ่งนี้: ตรวจสอบสองสามบรรทัดแรกของไฟล์ Microsoft Word และจะระบุว่าในความเป็นจริงแล้วคือไฟล์ Microsoft Word