Python programımı doğrudan kabuktan nasıl çalıştırabilirim?


10

Bir senaryo yazdım. Başladığında durmaz ve İnternet'ten veri almaya devam eder. Bu şekilde diyebilirim:

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

Ama ben doğrudan bu gibi terminalden, hedef içinde aramak istiyorum:

internetScanner start

Bunu nasıl yapabilirim?


2
Bu konuda başlık değiştirilip değiştirilemeyeceğini merak ediyorum ..
user606723

@ user606723 Değişiklik yapılması için bir düzenleme önermekten çekinmeyin. İlk başlık "Programımın kabukta çalışmasına nasıl izin verilir?" çok iyi değildi.
slhck

Yanıtlar:


27

Muhtemelen dosyayı yeniden adlandırmak gerekir main.pyiçin internetScanner. * Nix üzerindeki genişletmeler tamamen isteğe bağlıdır. Burada önemli değil.

mv main.py internetScanner

Ardından, en başta bu dosyaya aşağıdaki satırı ekleyin:

#!/usr/bin/env python3

Bu, kabuk dosyayı yürüttüğünde python3içeriği yorumlamak için kullanmayı bilecektir . Bu Shebang olarak bilinir . Şimdi dosyayı yürütülebilir yapın:

chmod +x internetScanner

Artık programınızı içinden çalıştırabilirsiniz /User/Desktop/project/internetScanner/:

./internetScanner start

Programınız ön planda çalıştırmak ve basın kadar çalışmaya devam edecek Ctrl- C. Bunu istemiyorsanız, komuttan sonra bir ve işareti ekleyerek programı arka planda da başlatabilirsiniz:

./internetScanner start &

Bu, programınızın çalışmasına izin verir, ancak kabuğunuzu kullanmaya devam edebilirsiniz. Bu iş kontrolü denir ve bu konuda basit bir öğretici var burada .

Şimdi programı sistemin herhangi bir yerinden çalıştırabilmek istiyorsanız, internetScannerdizini şu adrese eklemeniz gerekir PATH: PATH ve diğer ortam değişkenleri nedir ve bunları nasıl ayarlayabilir veya kullanabilirim?


İyi cevap. Bunu beklemek istemiyorsa ve / veya çıktısını ve hata akışını bir dosyaya yönlendirmek istemiyorsa komutu bir ve işareti (&) ile bitirmek isteyebileceğini eklemenizi tavsiye ederim .
Ben Hocking

@BenHocking Teşekkürler, cevaba ekledim.
slhck

X &işlemi kontrol eden kabuktan ayırmaz, yalnızca işlemi arka plan yapar, yani bu kabuk çıkarsa TERM sinyali gönderilir; böylece sen kullanması gerektiğini istemiyorsanız durumda ayırma , detach ./internetScanner start.
Dan D.

1
@DanD. … Veya nohup, disownveya atet cetera. Bir işlemi Terminal'den nasıl tamamen ayırabilirim?
slhck

$ PATH içinde bir yere main.pybağlandığı sürece hala adlandırılabileceğini belirtmek gerekir internetScanner.
JDD

2

Başka bir dosyaya gerek olmadığını varsayarsak /User/Desktop/project/internetScanner/, tek bir kullanıcı için yüklemek istiyorsanız, ( ln -s) main.pyile bağlantı kurun $HOME/bin/internetScanner. Muhtemelen önce mkdir yapmanız gerekecek $HOME/bin.

Bir sonraki girişinizde, $HOME/binmuhtemelen PATH'nize eklenecektir. Tüm kullanıcılar için kullanılabilir olmasını istiyorsanız, kopyalayın /usr/local/bin.

Yürütülmesi gerekiyorsa /User/Desktop/project/internetScanner/, ya içe aktarıp osarayarak başlayın

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

veya komut dosyasında değişen $HOME/binveya yürüten bir başlatıcı komut dosyası oluşturun./usr/local/bin/User/Desktop/project/internetScanner/


0

alias internetScanner "python /User/Desktop/project/internetScanner/main.py".Aliases dosyasını (csh için) koyun . Bash için .bashrc'yi koyun alias internetScanner="python /User/Desktop/project/internetScanner/main.py". Bundan sonra internetScanner kullanabilirsiniz her yerden.


Daha önce hiç .aliasesdosya duymadım . Bash için standart bir şey mi? ya da açık bir şekilde sizin kaynağınızda .bashrcmı?
Kazark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.