ฉันจะรันโปรแกรมไพ ธ อนโดยตรงจากเชลล์ได้อย่างไร?


10

ฉันเขียนสคริปต์ เมื่อมันเริ่มมันจะไม่หยุดและมันจะรับข้อมูลจากอินเทอร์เน็ต ฉันสามารถเรียกมันด้วยวิธีนี้:

cd /User/Desktop/project/internetScanner/
python3 main.py start

แต่ฉันต้องการเรียกมันโดยตรงจาก terminal เช่นนี้ภายในปลายทาง:

internetScanner start

ฉันจะทำเช่นนั้นได้อย่างไร


2
ฉันสงสัยว่าชื่ออาจมีการเปลี่ยนแปลงในนี้ ..
606723

@ user606723 อย่าลังเลที่จะแนะนำการแก้ไขที่จะมีการเปลี่ยนแปลง ชื่อแรก "ฉันจะให้โปรแกรมของฉันทำงานบน shell ได้อย่างไร" ไม่ค่อยดี
slhck

คำตอบ:


27

คุณอาจจะเปลี่ยนชื่อไฟล์ของคุณจะmain.py internetScannerส่วนขยายบน * ระวังเป็นตัวเลือกอย่างหมดจด มันไม่สำคัญที่นี่

mv main.py internetScanner

จากนั้นเพิ่มบรรทัดต่อไปนี้ในไฟล์นี้ทันทีที่จุดเริ่มต้น:

#!/usr/bin/env python3

สิ่งนี้จะทำให้แน่ใจว่าเมื่อเชลล์ประมวลผลไฟล์มันจะรู้ว่าใช้python3เพื่อตีความเนื้อหา นี้เป็นที่รู้จักกันshebang ตอนนี้ทำให้ไฟล์ปฏิบัติการ:

chmod +x internetScanner

ตอนนี้คุณสามารถรันโปรแกรมจากภายใน/User/Desktop/project/internetScanner/:

./internetScanner start

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

./internetScanner start &

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

หากตอนนี้คุณต้องการให้สามารถรันโปรแกรมจากที่ใดก็ได้ในระบบคุณต้องเพิ่มinternetScannerไดเรกทอรีลงในPATH: PATH และตัวแปรสภาพแวดล้อมอื่น ๆ คืออะไรและฉันจะตั้งค่าหรือใช้มันได้อย่างไร?


คำตอบที่ดี. ฉันขอแนะนำให้เพิ่มว่าเขาอาจต้องการจบคำสั่งด้วยเครื่องหมายและ (&) หากเขาไม่ต้องการรอและ / หรือเปลี่ยนเส้นทางเอาต์พุตและสตรีมข้อผิดพลาดไปยังไฟล์
Ben Hocking

@ BenHocking ขอบคุณฉันเพิ่มเข้าไปในคำตอบ
slhck

X &ไม่แยกกระบวนการออกจากเชลล์ควบคุมมันเพียงสร้างพื้นหลังของกระบวนการซึ่งหมายความว่าหากเชลล์นั้นออกจากมันจะได้รับสัญญาณ TERM ที่ส่งไปยังมัน ดังนั้นหากคุณไม่ต้องการที่คุณควรใช้detachdetach ./internetScanner start ,
Dan D.


มันอาจจะคุ้มค่าที่จะสังเกตว่ามันยังสามารถตั้งชื่อได้main.pyตราบใดที่มันเชื่อมโยงกับinternetScannerบางแห่งใน $ PATH
jdd

2

สมมติว่าไม่มีไฟล์อื่น ๆ ใน/User/Desktop/project/internetScanner/ที่มีความจำเป็นถ้าคุณต้องการติดตั้งสำหรับผู้ใช้คนเดียว, การเชื่อมโยง ( ln -s) เพื่อmain.py $HOME/bin/internetScannerคุณอาจจะต้อง mkdir $HOME/binก่อน

ครั้งต่อไปที่คุณเข้าสู่ระบบ$HOME/binอาจจะถูกเพิ่มใน PATH ของคุณ /usr/local/binหากคุณต้องการมันใช้ได้สำหรับผู้ใช้ทั้งหมดคัดลอกไป

หากต้องดำเนินการ/User/Desktop/project/internetScanner/ให้เริ่มต้นด้วยการนำเข้าosและโทร

os.chdir('/User/Desktop/project/internetScanner/') 

หรือสร้างสคริปต์เรียกใช้งานใน$HOME/binหรือ/usr/local/binเปลี่ยนแปลง/User/Desktop/project/internetScanner/และดำเนินการสคริปต์


0

ใส่alias internetScanner "python /User/Desktop/project/internetScanner/main.py"ในไฟล์ .aliases (สำหรับ csh) สำหรับทุบตีใส่alias internetScanner="python /User/Desktop/project/internetScanner/main.py"ใน. bashrc หลังจากนั้นคุณสามารถใช้อินเทอร์เน็ตสแกนเนอร์เริ่มจากที่ใดก็ได้


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