จะรันโปรแกรม Python โดยตรงได้อย่างไร?


13

จะรันโปรแกรม Python โดยตรงได้อย่างไร?

ฉันได้สร้างไฟล์. py (เช่นmnik.py ) ใน gedit มันทำงานได้อย่างราบรื่นในสถานี

คำสั่งไป

python3 mnik.py

แต่เมื่อใดก็ตามที่ฉันคลิกไฟล์มันจะเปิดขึ้นด้วย gedit ฉันไม่สามารถเรียกใช้ได้โดยตรงโดยการคลิก

จะทำอย่างไร?



4
@kasperd การพิมพ์python3บนบรรทัดคำสั่งด้วยอาร์กิวเมนต์เป็นวิธีที่ยอดเยี่ยมในการเรียกใช้สคริปต์ไพ ธ อน มันเป็นความจริงวิธีที่ง่ายที่สุดที่จะเรียกใช้โปรแกรมที่ต้องใช้ขั้วและข้อโต้แย้ง (เช่นหลายสคริปต์ของตัวเอง แต่ยังมีโปรแกรมชอบmercurial, sphinx) สนใจอธิบายว่าทำไมสิ่งที่ฉันทำมานานกว่า 20 ปีนั้นไม่ใช่วิธีที่เหมาะสม?
Anthon

3
@kasperd สคริปต์ Python ที่ถูกต้องที่เขียน (หรือโปรแกรม) ไม่จำเป็นต้องมีบรรทัด Shebang หากไม่เป็นเช่นนั้นก็ยังคงเป็นสคริปต์ Python ในทุก ๆ ด้าน สคริปต์นั้นไม่สามารถเรียกใช้งานได้จากเปลือก Linux ในรูปแบบสั้น ๆ ที่คุณต้องการ นอกจากนี้ยังมีสภาพแวดล้อมที่ไม่ต้องใช้สคริปต์ Python เพื่อให้มีบรรทัด shebang เลยและอนุญาตให้สคริปต์เหล่านั้นเริ่มโดยการดับเบิลคลิก
Anthon

1
@kasperd สิ่งที่ตอบสนองความต้องการของเคอร์เนลในการสั่งซื้อสำหรับสคริปต์ Python ที่จะทำงานโดยใช้การไม่ตรวจสอบการเรียกร้องของคุณที่ใช้สคริปต์จากบรรทัดคำสั่งโดยใช้./scriptname python3มีวิธีที่แตกต่างกันในการรันสคริปต์ python และการทำpython3 ./mnik.pyก็เป็นวิธีที่เหมาะสมในการทำสิ่งต่าง ๆ มันแตกต่างกันไป (และอย่างน้อยคุณก็จะได้รับ python3 ในแบบนั้นและไม่ใช่ python2 เหมือนมีคำตอบมากที่สุด)
Anthon

1
ใช้ <language> <script> เป็นทั้งหมดวิธีที่ถูกต้องและได้รับการยอมรับในการเรียกใช้สคริปต์ การแนะนำว่าเป็นการปฏิบัติที่ไม่ดีควรทำหน้านิ่วคิ้วขมวด
Jacob Vlijm

คำตอบ:


26

มีสองสิ่งที่จำเป็น

  1. สคริปต์ต้องมี#!บรรทัดบอก OS ซึ่งเป็นล่ามที่จะใช้ ในกรณีของคุณบรรทัดแรกของคุณในรหัสจะต้องเป็น#!/usr/bin/env python3
  2. คุณต้องเปิดโปรแกรมจัดการไฟล์ไปที่ Edit -> Preferences -> Behavior และเลือกว่าจะทำอย่างไรกับไฟล์ที่ปฏิบัติการได้

    ป้อนคำอธิบายรูปภาพที่นี่

    1. สุดท้ายตรวจสอบให้แน่ใจว่าไฟล์ของคุณมีการกำหนดสิทธิ์การใช้งานจริง ในเทอร์มินัลคุณสามารถทำได้chmod +x /path/to/script.pyและใน GUI คลิกขวาที่ไฟล์และแก้ไขคุณสมบัติ -> สิทธิ์

    ป้อนคำอธิบายรูปภาพที่นี่

    ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุเกี่ยวกับสาย shebang

บรรทัดแรกเรียกว่า shebang line และต้องเริ่มต้นด้วย#!; สิ่งต่อไปนี้คือชื่อของล่ามที่จะอ่านรหัสของคุณ ในกรณีที่คุณใช้python3คุณสามารถใช้อย่างใดอย่างหนึ่ง#!/usr/bin/python3หรือ #!/usr/bin/env python3เพื่อความสะดวกในการพกพา หากคุณไม่ได้ใช้รหัสที่จะเฉพาะเจาะจงกับรุ่นงูหลาม - เพียงแค่ใช้#!/usr/bin/env python

หมายเหตุเกี่ยวกับเอาต์พุตสคริปต์:

ถ้าผลการพิมพ์สคริปต์ของคุณไปยังคอนโซลมันจะต้องมีหน้าต่าง terminal หรือหรือใช้กล่องโต้ตอบ GUI zenityเช่น ต้องการRun in Terminalตัวเลือกการใช้งานถ้าคุณต้องการดูรหัส หากคุณต้องการให้สคริปต์ทำบางสิ่งโดยไม่เห็นRunตัวเลือกคอนโซลเอาต์พุต

ป้อนคำอธิบายรูปภาพที่นี่

นอกจากนี้หากคุณมีพารามิเตอร์บรรทัดคำสั่งเช่นsys.argv[1]ในสคริปต์คุณจะไม่สามารถตั้งค่าได้เว้นแต่คุณจะเปิดหน้าต่างเทอร์มินัล


1
@PriyadarshiPaul นั่นเป็นFilesโปรแกรมเดียวกับตัวเรียกใช้งาน ใน windows-speak ที่จะเป็น file explorer หรือMy Computer
Sergiy Kolodyazhnyy

@PriyadarshiPaul nautilusอยู่ใน Terminal
grooveplex


3
#!/usr/bin/env pythonจะเรียกใช้ Python2 บนระบบ Ubuntu ส่วนใหญ่ แม้ว่าคุณจะสามารถสร้างสคริปต์ Python สำหรับ Python3 ที่ทำงานร่วมกับ Python2 ได้ แต่ฉันก็ไม่คิดว่า OP จะทำเช่นนั้น #!/usr/bin/env python3ดูเหมือนว่าเหมาะสมมากขึ้น
Anthon

1
และทำไมเราถึงนำ Arch Linux มาที่นี่ บางทีฉันอาจจะเจอปัญหาเล็กน้อย แต่เรากำลังพูดถึง Ubuntu ที่นี่ บน Ubuntu โดยค่าเริ่มต้น python นั้นเชื่อมโยงกับ python2.7 หากคุณกำลังพัฒนาซอฟต์แวร์คุณควรทราบว่าลิงก์ใดถ้าคุณใช้อย่างอื่นที่ไม่ใช่รุ่นเริ่มต้นของระบบปฏิบัติการของคุณให้ระบุอย่างชัดเจน แน่นอนว่าเราสามารถตอบคำถามแต่ละข้อได้ แต่สำหรับการร้องไห้ออกมาดัง ๆ - หากคุณกำหนดรหัสให้ทำถูกต้อง
Sergiy Kolodyazhnyy

3

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

ค้นหาการติดตั้ง Python ของคุณ

$ which python
/usr/bin/python

เพิ่มตำแหน่งของโปรแกรมลงในบรรทัดบนสุดของโปรแกรมของคุณโดยมี#!ด้านหน้า

#!/usr/bin/python

# Python code goes here....

ตั้งค่าสคริปต์ Python ให้มีสิทธิ์ดำเนินการ

$ chmod 700 test.py

ตอนนี้คุณสามารถรันสคริปต์โดยตรง

$ ./test.py

รายการรหัสสำหรับ test.py

#!/usr/bin/python

print "test"

2

หากคุณต้องการเรียกใช้โปรแกรมนี้โดยไม่ต้องพิมพ์python3 mnik.pyคุณต้องทำให้สคริปต์ทำงานได้และตรวจสอบให้แน่ใจว่าpython3ใช้เพื่อเรียกใช้โปรแกรม

ครั้งแรกที่คุณสามารถทำได้โดยการทำงาน

 chmod +x mnik.py

ที่สองที่คุณสามารถทำได้โดยการเพิ่มเป็นบรรทัดแรกของสคริปต์บรรทัด shebang ที่จะเรียก python3 ในทุกระบบ Ubuntu ที่ฉันทำงานด้วยที่มาพร้อมกับ python3 คุณสามารถรับ python3 ได้โดยเพิ่มบรรทัดนี้ที่ด้านบน:

#!/usr/bin/env python3

หลังจากที่ทั้งสองการเปลี่ยนแปลงที่คุณสามารถพิมพ์/path/to/mnik.py, ./mnik.pyหรือเพียงแค่mnik.py(หลังต้องใช้สคริปต์ที่จะอยู่ในเส้นทางของคุณ)

หากคุณทำการเปลี่ยนแปลงเหล่านี้คุณอาจต้องการที่จะต้องพิจารณาเปลี่ยนชื่อmnik.pyไปmnikนั่นคือการปฏิบัติร่วมกันกับแพคเกจหลามกับคำสั่งที่มีการเผยแพร่บน PyPI


ตกลงสิ่งเหล่านี้ไม่ทำงาน
Priyadarshi Paul

"ตกลง" คืออะไร? "สิ่งเหล่านี้" หมายถึงอะไร?
Anthon

มันกำลังบอกว่า ** usr / bin / env: ล่ามที่ไม่ดี: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว **
Priyadarshi Paul

อย่างน้อยก็มี/ด้านหน้าที่ขาดหายไป กรุณาอธิบายว่า "มัน" คืออะไรในความคิดเห็นของคุณ มันเป็นเปลือกทุบตี? Comm Comm เป็น windows หรือไม่ จากสิ่งที่คุณเรียกใช้โปรแกรมและสิ่งที่ไวยากรณ์บรรทัดคำสั่ง?
Anthon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.