Doğrudan bir Python programı nasıl çalıştırılır?


13

Doğrudan bir Python programı nasıl çalıştırılır?

Gedit'te bir .py dosyası ( mnik.py diyelim ) oluşturdum . Terminalde sorunsuz çalışır.

Komut gidiyor

python3 mnik.py

Ancak dosyaya her tıkladığımda gedit ile açılır. Doğrudan tıklayarak çalıştıramıyorum.

Ne yapalım?



4
@kasperd python3Komut satırına bağımsız değişkenle yazmak, python komut dosyalarını çalıştırmak için mükemmel bir yoldur. Aslında, bir terminal ve argümanlar gerektiren bir programı çalıştırmanın en kolay yoludur (kendi komut dosyalarımın çoğu gibi, aynı zamanda mercurial, gibi programlar sphinx). Neden 20+ yıldır yaptığımın doğru yol olmadığını açıklamak ister misiniz?
Anthon

3
@kasperd Doğru yazılmış bir Python betiğinin (veya programının) bir shebang satırı olması gerekmez. Değilse, hala her şekilde bir Python betiği. Bu komut dosyası, Linux kabuklarından, tercih ettiğiniz kısa el formunda yürütülemez. Ayrıca, Python betiklerinin bir shebang satırına sahip olmasını gerektirmeyen ve çift tıklatarak betiği başlatmalarına izin vermeyen ortamlar da vardır.
Anthon

1
@kasperd Bir Python betiğinin kullanarak çalışabilmesi için çekirdeğin ihtiyacı, bir betiğin komut satırından kullanarak çalıştırıldığı ./scriptnameiddiasını doğrulamaz python3. Python komut dosyalarını çalıştırmanın farklı yolları vardır ve bunu python3 ./mnik.pyyapmak da uygun bir yöntemdir, sadece farklıdır (ve en azından şu ana kadar cevapların çoğunda olduğu gibi python2'yi bu şekilde değil python2'yi alırsınız)
Anthon

1
<language> <script> kullanmak bir komut dosyasını çalıştırmanın tamamen geçerli ve kabul edilen bir yoludur. Bunun kötü olduğunu ileri sürmek için kaşlarını çatmak gerekir.
Jacob Vlijm

Yanıtlar:


26

İki şey gerekiyor.

  1. Bir komut dosyasının #!işletim sistemine hangi yorumlayıcıyı kullanacağını söyleyen bir satırı olmalıdır . Sizin durumunuzda , koddaki ilk satırınız#!/usr/bin/env python3
  2. Dosya yöneticisini açmanız, Düzenle -> Tercihler -> Davranış'a gidin ve yürütülebilir dosyalarla ne yapılacağını seçmeniz gerekir

    resim açıklamasını buraya girin

    1. Son olarak, dosyanızın kendisinin gerçekten yürütülebilir izinlere sahip olduğundan emin olun. Terminalde yapabilirsiniz chmod +x /path/to/script.pyve GUI'de, dosyayı sağ tıklayın ve Özellikler -> İzinler'i değiştirin

    resim açıklamasını buraya girin

    resim açıklamasını buraya girin

Mesele hattı hakkında not

İlk satıra shebang hattı denir ve başlamalıdır #!; bundan sonra gelen kodunuzu okuyacak tercümanın adıdır. Kullanmanız durumunda , taşınabilirlik için python3ya #!/usr/bin/python3da birini kullanabilirsiniz #!/usr/bin/env python3. Python sürümüne özgü kod kullanmıyorsanız -#!/usr/bin/env python

Komut dosyası çıktısı hakkında not:

Betiğiniz çıktıyı konsola yazdırırsa, terminal penceresine sahip olması veya alternatif olarak GUI iletişim kutularını kullanması gerekir zenity. Run in TerminalKodu görmek istiyorsanız seçeneği kullanmayı tercih edin. Komut dosyasının konsol çıktısını görmeden bir şey yapmasını istiyorsanız - kullanma Runseçeneğini kullanın.

resim açıklamasını buraya girin

Ayrıca sys.argv[1], komut dosyasında olduğu gibi komut satırı parametreleriniz varsa, terminal penceresi açık değilse bunları ayarlayamazsınız.


1
@PriyadarshiPaul FilesBaşlatıcıdaki programla aynı . Windows-konuşmada bu dosya gezgini veyaMy Computer
Sergiy Kolodyazhnyy

@PriyadarshiPaul nautilusTerminalde
grooveplex

1
@Serg ile ilgili: Python betiklerine ( shebang) koymalı mıyım #!ve ne biçim almalı?
jfs

3
#!/usr/bin/env pythonçoğu Ubuntu sisteminde Python2'yi çağırır. Python3 için yazılmış bir Python betiği Python2 ile uyumlu yapabilseniz de, OP'nin bunu yaptığını varsaymam. #!/usr/bin/env python3daha uygun bir şey gibi görünüyor
Anthon

1
Ve neden Arch Linux'u buraya getiriyoruz? Belki biraz kabadayım ama burada Ubuntu'dan bahsediyoruz. Ubuntu'da varsayılan olarak python python2.7 ile bağlantılıdır Eğer yazılım geliştiriyorsanız, muhtemelen işletim sisteminizin varsayılan sürümünden başka bir şey kullanıyorsanız, hangi bağlantıları kullandığınızı bilmelisiniz. Elbette, her bir soruya hitap edebiliriz, ancak yüksek sesle ağlamak için - kod yazarsanız, doğru yapın.
Sergiy Kolodyazhnyy

3

Kodunuzu ilk satırda yürütmek için programın konumunu koymanız ve ardından komut dosyasını izinlerini değiştirerek çalıştırılabilir olarak çalışacak şekilde ayarlamanız gerekir. Bu, uygulamalarınızı terminalden veya başka bir komut dosyasından başlattığınızı varsayar.

Python kurulumunuzu bulun

$ which python
/usr/bin/python

Programların konumunu #!, önde bir ile programınızın en üst satırına ekleyin

#!/usr/bin/python

# Python code goes here....

Python komut dosyasını yürütme haklarına sahip olacak şekilde ayarlama

$ chmod 700 test.py

Şimdi betiği doğrudan çalıştırabilirsiniz

$ ./test.py

Test.py için kod listesi

#!/usr/bin/python

print "test"

2

Bu programı yazmadan çalıştırmak istiyorsanız python3 mnik.py, komut dosyasını yürütülebilir hale getirmeniz ve python3çalıştırmak için kullanıldığından emin olmanız gerekir.

İlk çalıştırarak yapabilirsin

 chmod +x mnik.py

ikinci bir komut dosyası ilk satır olarak python3 çağıran bir shebang satır ekleyerek yapabilirsiniz . Çalıştığım tüm Ubuntu sistemlerinde python3 ile birlikte gelir, bu satırı en üste ekleyerek python3'ü alabilirsiniz:

#!/usr/bin/env python3

Bu iki değişikliklerden sonra yazabilirsiniz /path/to/mnik.py, ./mnik.pyya da sadece mnik.py(ikincisi PATH içinde olmasını senaryoyu gerektirir).

Bu değişiklikleri yaparsanız da yeniden adlandırma düşünebilirsiniz mnik.pyiçin mnikPyPI yayınlanır komutlarla Python paketleri ile yaygın bir uygulama olduğunu,.


Tamam, Bunlardan herhangi biri artık çalışmıyor
Priyadarshi Paul

Ne tamam"? "Bunlar" ne anlama geliyor?
Anthon

** usr / bin / env diyor: kötü tercüman: Böyle bir dosya veya dizin yok **
Priyadarshi Paul

/Ön tarafta en azından bir eksik var. Lütfen yorumunuzda "O" nun ne olduğunu açıklayın. Bu bash kabuğu mı? Windows Command.com mu? Programı neyle ve hangi komut satırı sözdizimiyle çağırıyorsunuz?
Anthon
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.