#! / Usr / bin / python3'ün amacı


160

Bunu birkaç betik dilinde fark ettim, ancak bu örnekte python kullanıyorum. Birçok öğreticide, #!/usr/bin/python3ilk satırda başlayacaklardı . Buna neden sahip olduğumuzu anlamıyorum.

  • İşletim sistemi bunun bir python betiği olduğunu bilmemeli (buna referans yaptığınızdan açıktır)
  • Kullanıcı unix tabanlı olmayan bir işletim sistemi kullanıyorsa ne olur?
  • Herhangi bir nedenle dil farklı bir klasöre yüklenir
  • Kullanıcının farklı bir sürümü var. Özellikle tam sürüm numarası olmadığında (Python3 vs Python32 gibi)

Bir şey varsa, bu listelenen nedenlerden dolayı python komut dosyası kırma görebiliyordu.



9
Bu soruya sadece mesele dizesini kopyalamak için geldim.
omerjerk

Yanıtlar:


261

#!/usr/bin/python3bir shebang hattı .

Bir shebang hattı, yorumlayıcının bulunduğu yeri tanımlar. Bu durumda, python3tercüman bulunur /usr/bin/python3. A shebang hattı da bir olabilir bash, ruby, perlörneğin ya da başka bir betik dilleri tercüman,: #!/bin/bash.

Mesele satırı olmadan, işletim sistemi bir python betiği bilmiyor, betiğin üzerindeki yürütme bayrağını ayarlayıp çalıştırsanız bile ./script.py. Komut dosyasını python3'te varsayılan olarak çalıştırmak için ya onu çağırın ya da shebang python3 script.pysatırını ayarlayın.

#!/usr/bin/env python3Dil yorumlayıcısının farklı konumlara yüklenmiş olması durumunda farklı sistemlerde taşınabilirlik için kullanabilirsiniz .


9
Öyleyse #! /usr/bin/env python3seçilmeli #! /usr/bin/python3mi?
winklerrr

4
@winklerrr Evet, daha yaygın olarak kullanılmaktadır.
MerreM

20

Buna karma-patlama denir. Komut dosyasını kabuktan çalıştırırsanız, komut dosyasını yorumlamak için hangi programın başlatılması gerektiğini bulmak için ilk satırı inceler.

Unix tabanlı olmayan bir işletim sistemi, komut dosyasının nasıl çalıştırılacağını bulmak için kendi kurallarını kullanır. Örneğin Windows dosya adı uzantısını kullanır ve #ilk satırın yorum olarak ele alınmasına neden olur.

Python yürütülebilir dosyasının yolu yanlışsa, komut dosyası doğal olarak başarısız olur. Standart kural ile belirtilen herhangi bir konumdan gerçek yürütülebilir dosyaya bağlantılar oluşturmak kolaydır.


12

Bu satır, komut dosyasını çalıştıracak programın yürütülebilir dosyasının bulunmasına yardımcı olur. Bu sapma notasyonu, çoğu komut dosyası dilinde (en azından yetişkin işletim sistemlerinde kullanıldığı gibi) oldukça standarttır.

Bu satırın önemli bir yönü, hangi tercümanın kullanılacağını belirlemektir. Örneğin, geliştirme merkezli birçok Linux dağıtımında, aynı anda birkaç python sürümünün kurulu olması normaldir.

Python 2.x ve Python 3% 100 uyumlu değildir, bu nedenle bu fark çok önemli olabilir. Bu nedenle #! /usr/bin/pythonve #! /usr/bin/python3bunlar aynı değildir (ve ikisi de #! /usr/bin/env python3bu sayfanın başka bir bölümünde belirtildiği gibi değildir).


6
  1. Ve bu çizgi nasıl .

  2. Yok sayılır.

  3. Çalışması başarısız olur ve uygun konumu gösterecek şekilde değiştirilmelidir. Veya envkullanılmalıdır.

  4. Çalıştırılamaz ve muhtemelen farklı bir sürüm altında çalıştırılamaz.


3

3.7 Python belgesinden, shebang hattının pencereler için nasıl çalıştığını açıklığa kavuşturmak için :

  • Bir komut dosyasının ilk satırı #! İle başlıyorsa, “shebang” satırı olarak bilinir. Linux ve diğer Unix benzeri işletim sistemleri bu satırlar için yerel desteğe sahiptir ve bu tür sistemlerde genellikle bir komut dosyasının nasıl yürütülmesi gerektiğini belirtmek için kullanılır.
  • Windows için Python Launcher, Windows'taki Python komut dosyalarıyla aynı özelliklerin kullanılmasına izin verir
  • Python betiklerindeki shebang satırlarının Unix ve Windows arasında taşınabilir olmasına izin vermek için, başlatıcı hangi yorumlayıcının kullanılacağını belirtmek için bir dizi 'sanal' komutu destekler. Desteklenen sanal komutlar:
    • / usr / bin / env python
      • Mesele hattının / usr / bin / env formunun bir başka özelliği daha vardır. Yüklü Python yorumlayıcılarını aramadan önce, bu form yürütülebilir PATH'de bir Python yürütülebilir dosyası arar. Bu, PATH araması yapan Unix env programının davranışına karşılık gelir.
    • / Usr / bin / python
    • / Usr / local / bin / python
    • piton

2

Aslında bir dosyanın ne tür bir dosyanın çok karmaşık olduğunun belirlenmesi, bu yüzden şimdi işletim sistemi sadece bilemez. Dayalı birçok tahmin yapabilirsiniz -

  • uzantı
  • İYE
  • MIME

Ancak komut satırı tüm bunlarla uğraşmaz, çünkü bu süslü saçmalık hiçbir şey ifade etmediği zamandan geriye dönük uyumlu bir katman üzerinde çalışır. Emin olarak çift tıklarsanız, modern bir işletim sistemi bunu anlayabilir - ancak bir terminalden çalıştırırsanız hayır, çünkü terminal süslü işletim sistemine özgü dosya yazma API'lerinizi umursamıyor.

Diğer hususlarla ilgili. Bu bir kolaylıktır, aynı şekilde çalıştırmak da mümkündür

python3 path/to/your/script

Pythonunuz belirtilen yolda değilse, işe yaramaz, ancak bunun gibi şeyler yapmak için bir şeyler yükleme eğilimindeyiz, tersi şekilde değil. Aslında * nix'in altında olmanızın bir önemi yok, bu satırı düşünüp düşünmemen sizin kabuğunuza bağlıdır, çünkü bir shellcode. Yani örneğin bashWindows altında çalıştırabilirsiniz .

Aslında bu çizgiyi tamamen ommit edebilirsiniz, bu sadece arayanın bir tercüman belirtmesi gerektiği anlamına gelir. Ayrıca tercümanlarınızı standart olmayan yerlere koymayın ve ardından tercüman sağlamadan komut dosyalarını çağırmayı deneyin.

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.