Linux'ta, Python #!
(shebang) satırını gerektirebilir veya gerektirmeyebilir . Bu, Python kodlarının nasıl işlendiğine, kodları Python etkileşimli modunda veya bir Python komut dosyasında çalıştırarak bağlıdır.
Python etkileşimli modu , kullanıcının doğrudan shebang satırı gerektirmeyen Python kodlarını yazmasına ve çalıştırmasına izin verir. Etkileşimli modu çalıştırmak için bir Terminal açın ve python
Python 2.X veya python3
Python 3.X için yazın.
$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ python3
Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Python betiği , kullanıcının Python kodlarını düz bir metin dosyasına yazmasını ve kaydetmesini ve ardından kodları daha sonra çalıştırmasını sağlar. Bu shebang hattını gerektirebilir veya gerektirmeyebilir. Ancak, shebang satırının Linux'ta Python betiğini kullanmak için gerekli olduğu bilinen iki neden vardır.
Python kodlarını çalıştırılabilir bir komut dosyasında çalıştırmak yani kodların nasıl çalıştırılacağını ve hangi tercümanı kullanacağını tanımlar;
Python kodlarını, belirli Python sürümüne göre çalıştırmak, yani yalnızca Python 2.X veya Python 3.X ile uyumlu kodları çalıştırmak
Python scriptleri ile alıştırma yapın
Aşağıda #!
(shebang) satırının gerekli olduğunu veya gerekmediğini gösteren vakaları göstermek için kullandığım dosyaların listesi ve içeriği verilmiştir .
$ ls -ln *.py
-rw-rw-r-- 1 1000 1000 94 Dec 14 18:37 hello1.py
-rwxrwxr-x 1 1000 1000 116 Dec 14 18:37 hello2e.py
-rw-rw-r-- 1 1000 1000 116 Dec 14 18:37 hello2.py
-rwxrwxr-x 1 1000 1000 117 Dec 14 18:37 hello3e.py
-rwxrwxr-x 1 1000 1000 120 Dec 14 18:37 hello3m.py
-rw-rw-r-- 1 1000 1000 117 Dec 14 18:37 hello3.py
$ file *.py
hello1.py: ASCII text
hello2e.py: Python script, ASCII text executable
hello2.py: Python script, ASCII text executable
hello3e.py: Python script, ASCII text executable
hello3m.py: Python script, UTF-8 Unicode (with BOM) text executable
hello3.py: Python script, ASCII text executable
hello1.py
sadece kaynak kodunu içerir.
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2.py
kaynak kodu ve shebang satırını içerir.
#!/usr/bin/env python
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2e.py
içerir hello2.py
ve çalıştırılabilir.
hello3.py
aynı içeren hello2.py
ilk satırı için adlandırma ile Python 3 ile işletmek üzere adapte edilmektedir hariç #!/usr/bin/env python3
.
hello3e.py
içerir hello3.py
ve çalıştırılabilir.
hello3m.py
metin düzenleyicideki, yani Mousepad'teki seçenekle hello3.py
birlikte kaydedilen hariç , aynı ve yürütülebilir dosyaya sahip Write Unicode BOM
.
Bu noktanın ötesinde, kullanıcı Python komut dosyalarını çalıştırmak için iki yöntemle sunulacak. Her iki yöntem de aşağıda gösterilmiştir.
Yöntem 1: Python programıyla çalıştırma
Kaynak kodu Python 2 ve Python 3 ile çalıştırırken aşağıda verilen komutlar ve çıktılar.
$ python hello1.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ python3 hello1.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Python'un her iki sürümü de komut dosyasını başarıyla çalıştırabilirdi. Bu nedenle, Python betiğini veya komutunu çalıştırırken shebang satırı gerekli değildir .python
python3
Yöntem 2: Python betiği olarak çalıştır
Kaynak kodu çalıştırılamaz ve çalıştırılabilir durumlar da dahil olmak üzere hiçbiri Python 2 ve Python 3'e uyarlanmamış shebang hattıyla çalıştırırken verilen komutlar ve çıktılar.
$ ./hello1.py
bash: ./hello1.py: Permission denied
$ ./hello2.py
bash: ./hello2.py: Permission denied
$ ./hello3.py
bash: ./hello3.py: Permission denied
$ ./hello2e.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ ./hello3e.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Bu komut dosyaları yürütülemez, çünkü ilk üç komut bakılmaksızın shebang hattını olup olmamasına (kanıt destekleyen için bkz, başarısız olmuş Ek örneği aşağıda). Son iki senaryoda shebang satırı var ve çalıştırılabilir.
Görünüşe göre, çalıştırılabilir hale getirilmiş bir betik, aslında Shebang satırı olmadan işe yaramaz. Bu nedenle, shebang satırı gereklidir ve Python kodlarını çalıştırılabilir bir komut dosyasında çalıştırırken komut dosyası çalıştırılabilir olmalıdır.
Shebang işe yaramadığında
Hazırlanan ve test edilen örneğimde, hello3m.py
yürütülebilir bir komut dosyası olarak çalıştırma başarısız oldu ve bir hata döndürdü.
$ ./hello3m.py
./hello3m.py: line 1: #!/usr/bin/env: No such file or directory
Bu, Shebang'ın çalışmadığı veya geçersiz olduğu bilinen bir sınırlamadır . Bir dosya Unicode BOM (Byte Order Mark) olarak kaydedildiğinde, çalıştırılabilir bir Python betiği olarak normal şekilde çalıştırılamaz.
Ek örnek
Bu ek örnek yalnızca destekleyici kanıt olarak değerlendirilecektir. Sonuç zararsız olsa da, kullanıcı bu örneği çalıştırmaktan kaçınmalıdır.
hello1e.py
Aynı içeren hello1.py
ve çalıştırılabilir hale getirilen başka bir dosya oluşturdum . Bu betiği çalıştırmak bir sözdizimi hatası verdi.
$ ./hello1e.py
./hello1e.py: line 2: syntax error near unexpected token `"Hello from Python %s\n"'
./hello1e.py: line 2: `sys.stdout.write("Hello from Python %s\n" % (sys.version,))'
Bu betiği çalıştırırken, ilk başta, fare imleci bir artı işaretine dönüşecek ve görünüşte hiçbir şey yapmayacaktır. Masaüstü veya Terminal penceresine bir tıklama yapmadan sözdizimi hatası gösterilmez. Ardından, bu komut dosyası, komut sys
dosyasıyla aynı dizinde bir dosya oluşturur .
$ file sys
sys: PostScript document text conforming DSC level 3.0, Level 1
sys
Dosya dosya uzantısı olmadan, PostScript dosyası olarak tanımlanmıştır. Bu dosya Evince belgesinde açılabilir ve dosya aslında daha önce tıkladığım pencerenin ekran görüntüsünü içeriyordu. Benim tecrübeme göre, dosya birkaç megabayt kadar büyük olabilir.
Bir kez daha, shebang satırı gereklidir ve Python betiğini çalıştırılabilir bir komut dosyası olarak çalıştırırken betiğin çalıştırılabilir olması gerekir. Aksi takdirde, komut dosyası yukarıda açıklandığı gibi yanlış davranacaktır.
Ek Notlar
"Yapılabilir hale getirilebilir" veya "çalıştırılabilir olması gerekir" terimi, komut dosyasını çalıştırma iznini belirtir. Bu işlem chmod +x FILENAME
, Terminal'de komut çalıştırılarak veya "Bu dosyanın program olarak çalışmasına izin ver" seçeneğinin veya Özellikler penceresinde, bir dosya yöneticisinin içindeki benzer bir şeyin işaretlenmesiyle yapılır .
Diğer mevcut cevaplar hemen hemen her şeyi kapsamasına rağmen, bu cevap, konuyu açıklamak için pratik örnekler kullanarak farklı bir yaklaşım benimsemiştir. Kod sözdizimi, örneklerin olduğu gibi Python 2 veya Python 3 ile çalıştırılabileceği şekilde dikkatlice yazılmıştır.
Python kodları adapte edilmiştir Windows üzerinde Python Kullanımı ve Unix platformlarında Python kullanarak her yerde ek tek satırlık kodu ile "Merhaba, Dünya!" programı.
Tüm kodlar ve komutlar tamamen test edilmiştir ve varsayılan olarak Python 2.7 ve Python 3.4 yüklü olan Xubuntu 14.04 sisteminde çalışır.
.
ne tür bir dosya olduğunu belirlemek için dosyanın uzantısına (sonraki bölüm ) bağlıdır . Windows bile bundan uzaklaşıyor: Microsoft Word dosyasının ilk birkaç satırını inceleyin ve aslında bir Microsoft Word dosyası olduğunu belirtir.