Bagaimana saya bisa menjalankan program python saya langsung dari shell?

10

Saya menulis naskah. Ketika mulai, itu tidak akan berhenti, dan itu terus mendapatkan data dari Internet. Saya bisa menyebutnya seperti ini:

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

Tapi saya ingin menyebutnya langsung dari terminal seperti ini, di tempat tujuan:

internetScanner start

Bagaimana saya bisa melakukannya?

Ted Wong
sumber
2
Saya ingin tahu apakah judulnya dapat diubah pada ini ..
user606723
@ user606723 Jangan ragu untuk menyarankan suntingan untuk mengubahnya. Judul pertama "Bagaimana membiarkan program saya dapat berjalan di shell?" tidak terlalu bagus.
slhck

Jawaban:

27

Anda mungkin harus mengganti nama file Anda main.pymenjadi internetScanner. Ekstensi pada * nix adalah murni opsional. Seharusnya tidak masalah di sini.

mv main.py internetScanner

Kemudian, tambahkan baris berikut ke file ini, tepat di awal:

#!/usr/bin/env python3

Ini akan memastikan bahwa ketika shell mengeksekusi file, itu akan tahu digunakan python3untuk menafsirkan konten. Ini dikenal sebagai Shebang . Sekarang, buat file tersebut dapat dieksekusi:

chmod +x internetScanner

Anda sekarang dapat menjalankan program Anda dari dalam /User/Desktop/project/internetScanner/:

./internetScanner start

Program Anda akan berjalan di latar depan dan terus berjalan sampai Anda menekan Ctrl- C. Jika Anda tidak menginginkan ini, Anda juga dapat memulai program di latar belakang, dengan menambahkan tanda dan setelah perintah:

./internetScanner start &

Ini akan membiarkan program Anda berjalan, tetapi Anda dapat terus menggunakan shell Anda. Ini disebut kontrol pekerjaan, dan ada tutorial sederhana tentang hal itu di sini .

Jika sekarang Anda ingin dapat menjalankan program dari mana saja pada sistem, Anda perlu menambahkan internetScannerdirektori ke PATH: Apa itu PATH dan variabel lingkungan lainnya, dan bagaimana cara mengatur atau menggunakannya?

slhck
sumber
Jawaban yang bagus. Saya akan merekomendasikan menambahkan bahwa dia mungkin ingin mengakhiri perintah dengan ampersand (&) jika dia tidak ingin menunggu dan / atau mengarahkan ulang output dan error stream ke file.
Ben Hocking
@BenHocking Terima kasih, saya menambahkannya ke jawabannya.
slhck
X &tidak melepaskan proses dari shell pengontrol, itu hanya latar belakang proses, yang berarti jika shell keluar itu akan mendapatkan sinyal TERM dikirim ke dalamnya; jadi jika Anda tidak ingin bahwa Anda harus menggunakan detach , detach ./internetScanner start.
Dan D.
1
@DanD. ... atau nohup, disownatau at, dan sebagainya. Bagaimana cara melepaskan proses dari Terminal, seluruhnya?
slhck
Mungkin perlu dicatat bahwa itu masih bisa dinamai main.pyasalkan disinkronkan ke internetScannersuatu tempat di $ PATH.
jdd
2

Dengan asumsi tidak ada file lain /User/Desktop/project/internetScanner/yang diperlukan, jika Anda ingin menginstal untuk satu pengguna, tautan ( ln -s) main.pyke $HOME/bin/internetScanner. Anda mungkin harus mkdir $HOME/binterlebih dahulu.

Lain kali Anda masuk, $HOME/binmungkin akan ditambahkan ke PATH Anda. Jika Anda ingin itu tersedia untuk semua pengguna, salin ke /usr/local/bin.

Jika harus dijalankan /User/Desktop/project/internetScanner/, mulailah dengan mengimpor osdan menelepon

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

atau membuat skrip peluncur di $HOME/binatau /usr/local/binyang mengubah /User/Desktop/project/internetScanner/dan mengeksekusi skrip.

Perkins
sumber
0

Masukkan alias internetScanner "python /User/Desktop/project/internetScanner/main.py"file .aliases (untuk csh). Untuk bash, masukkan alias internetScanner="python /User/Desktop/project/internetScanner/main.py".bashrc. Setelah itu Anda bisa menggunakan internetScanner mulai dari mana saja.

Excalibur
sumber
Saya belum pernah mendengar tentang .aliasesfile. Apakah itu sesuatu yang standar untuk Bash? atau Anda harus secara eksplisit sumbernya di Anda .bashrc?
Kazark