การเรียกใช้สคริปต์ไพ ธ อนจากเทอร์มินัลโดยไม่มีนามสกุล. py


14

ฉันต้องการที่จะเรียกสคริปต์หลามscript.pyจากท่าเรือโดยเพียงแค่พิมพ์สคริปต์ เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร

ฉันรู้ว่าฉันสามารถหลีกเลี่ยงการพิมพ์python script.py ได้โดยเพิ่ม#! / usr / bin / env pythonไว้ด้านบนสุดของสคริปต์ แต่ฉันยังต้องเพิ่มคำต่อท้าย. pyเพื่อเรียกใช้สคริปต์

คำตอบ:


21

ระบบไฟล์ Unix / Linux ไม่พึ่งพาส่วนขยายแบบที่หน้าต่างทำ คุณไม่จำเป็นต้องใช้.pyที่ท้ายไฟล์เพื่อเรียกใช้

คุณสามารถเรียกใช้ไฟล์โดยเรียกมันด้วยล่าม:

python ScriptFile

หรือโดยการทำเครื่องหมายให้เรียกทำงานและกำหนดล่ามในบรรทัดแรก (เช่น#!/usr/bin/python)

หากคุณไม่สามารถเรียกใช้ไฟล์ด้วย:

/Path/to/ScriptFile

ตรวจสอบการอนุญาตด้วย

ls -l ScriptFile

คุณอาจจำเป็นต้องเพิ่มการตั้งค่าสถานะปฏิบัติการและchmodมันจะดำเนินการสำหรับคุณ

หากคุณใช้สคริปต์ที่กำหนดเองเป็นประจำคุณอาจต้องการตรวจสอบให้แน่ใจว่ามีการเพิ่มไดเรกทอรีที่คุณเก็บไว้ในPATHตัวแปรสภาพแวดล้อม


1
ไฟล์อยู่ใน ~ / workspace / python ฉันได้เพิ่ม ~ / workspace / python ในเส้นทางของฉันฉันวิ่งsudo chmod a + x script.py "และฉันได้เพิ่มบรรทัด shebang (#! / usr / bin / env python) ที่ด้านบนสุดของสคริปต์ ฉันสามารถเรียกใช้สคริปต์ได้โดยพิมพ์ * script.pyแต่เพียงแค่พิมพ์สคริปต์ไม่ทำงาน
jmau5

2
ใน unix / linux ทุกอย่างเป็นไฟล์และตอบสนองต่อชื่อไฟล์ คุณไม่สามารถเรียก Script.py เป็นสคริปต์ได้ ลองเปลี่ยนชื่อไฟล์จาก script.py เป็น script และควรแก้ไขปัญหาของคุณ
Patrick

ขออภัยฉันเข้าใจผิด! ทุกอย่างถูกแก้ไขแล้วขอบคุณ!
jmau5

5

.pyส่วนขยายที่ไม่จำเป็นสำหรับการเรียกใช้สคริปต์ คุณต้องทำให้สคริปต์ทำงานได้ (เช่นเมื่อทำงานchmod a+x script) และเพิ่มบรรทัด shebang ( #!/usr/bin/env python)


ดูความคิดเห็นของฉันเกี่ยวกับคำตอบของ Patrick
jmau5

4

เป็นตัวเลือกที่คุณสามารถสร้าง wrapper สำหรับสคริปต์ของคุณ ( .pyไฟล์):

ตัวอย่างเช่นคุณมีสคริปต์runme.pyเพื่อให้คุณสามารถสร้างไฟล์ใหม่runmeเพื่อตัดสคริปต์:

#!/usr/bin/env python
import runme

จากนั้นเรียกใช้runme.pyฟังก์ชันโดยการเรียกใช้runmeในเชลล์

ซึ่งมีประโยชน์สำหรับสคริปต์หลายแพลตฟอร์มทำให้เกิดบนแพลตฟอร์ม Windows คุณสามารถกำหนด.pyไฟล์ที่จะเรียกใช้โดยชื่อโดยไม่ต้องมีนามสกุลและshebangในส่วนหัว แต่บนแพลตฟอร์ม linux ที่คุณทำไม่ได้และสิ่งที่ห่อหุ้มออกมา

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