Kabuk Betiği: Kabuk betiğinin içinden bir python programı yürütün


139

Cevabı aramayı denedim ama hiç şansım yok.

Benim çalışır süper bilgisayar sunucusunu kullanmalıyım, ama benim python komut dosyası çalıştırmak için, bir kabuk komut dosyası aracılığıyla yürütülmelidir.

Mesela job.shidam etmek istiyorumpython_script.py

Bu nasıl yapılabilir?


2
Sadece python python_script.pykabuk betiğini koymayı denedin mi?
thkala

Um python python_script.py. Ya ./python_script.pyda senaryoda bir sapma varsa.

2
@delnan: ./python_script.py ayrıca betiğin çalıştırılabilir olmasını gerektirir
thkala

tam olarak ne denediniz ve sorun nedir? Ya bir google arama o kadar iyi yapmadınız, ya da bize söylemediğiniz çok şey var ...
thkala

3
Bu oldukça eski bir soru ama en iyi / en eksiksiz cevap João Víctor tarafından sorulan soru. Aşağıya okuduğunuzdan emin olun.
Hala.

Yanıtlar:


194

Python yürütülebilir dosyasının PATH ortam değişkeninizde olduğundan emin olun, sonra komut dosyanıza ekleyin

python path/to/the/python_script.py

Detaylar:

  • Job.sh dosyasında bunu
#!/bin/sh
python python_script.py
  • Komut dosyasını sizin için çalıştırılabilir yapmak için bu komutu yürütün: chmod u+x job.sh
  • Çalıştır: ./job.sh

2
Sisteminize bağlıdır. Python 3, varsayılan python çalışma zamanı olabilir veya olmayabilir. Çalıştırarak kontrol python --versionedebilir ve sürümü ile uygulayabilirsiniz python3 hello.py.
Jean-Bernard Jansen

Pandalar gibi önceden yüklenmiş ithalatları bulamazsa ne yapmalı?
mah65

Bu, yanlış python ikili dosyasını başlattığınız veya ortamın doğru olmadığı anlamına gelir. Bu durumda, bir virtualenv doldurmalı, ardından çalıştırmalı ve source PATH/TO/VENV/bin/activatearamalısınızpython python_script.py
Jean-Bernard Jansen

Bunu automator'da yapmaya çalışıyorum ve bir hata alıyorum; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedPython kodumu bash betiğine satır içine eklemenin bir yolu var mı?
Keyslinger

111

Yöntem 1 - Kabuk betiği oluşturma:

Bir python dosyanız olduğunu varsayalım hello.py adlı bir dosya oluşturun job.sho içeriyor

#!/bin/bash
python hello.py

kullanarak çalıştırılabilir olarak işaretle

$ chmod +x job.sh

sonra çalıştır

$ ./job.sh

Yöntem 2 (DAHA İYİ) - Python'un kendisini kabuktan çalıştır:

Komut dosyanızı değiştirin hello.pyve bunu ilk satır olarak ekleyin

#!/usr/bin/env python

kullanarak çalıştırılabilir olarak işaretle

$ chmod +x hello.py

sonra çalıştır

$ ./hello.py

5
Daha okunabilir hale getirmek için lütfen yanıtınızı düzenleyin. Komut dosyası içeriklerini kod olarak işaretlemek için cevap düzenleyicideki 101010 düğmesini kullanabilirsiniz.
thkala

1
Her zaman unuturum #!/usr/bin/env python. Sisteminiz için doğru python sürümü + yoluna başvurduğunuzdan emin olun!
Hala Tony

10

Imho, yazı

python /path/to/script.py

Özellikle bu günlerde oldukça yanlış. Hangi piton? python2.6? 2.7? 3.0? 3.1? Çoğu zaman, python dosyasının shebang etiketinde python sürümünü belirtmeniz gerekir. Kullanmayı teşvik ediyorum

#! / usr / bin / env python2 # veya python2.6 veya python3 veya hatta python3.1
uyumluluk için.

Bu durumda, komut dosyasının yürütülebilir olması ve doğrudan çağrılması çok daha iyidir:

#! / Bin / bash

/path/to/script.py

Bu şekilde ihtiyacınız olan python sürümü yalnızca bir dosyada yazılır. Sistemin çoğu bu gün bu arada python2 ve python3 yaşıyorsanız ve sembolik bağı olur piton işaret python3 , çoğu insan bunun işaret bekliyoruz ederken python2 .


1
Parametreleri olduğu gibi geçirebilir misiniz python script.py param?
kristian

@kristian yes./abc.py -h

7

Aşağıdaki programı farklı kaydedin print.py:

#!/usr/bin/python3
print('Hello World')

Sonra terminal türüne:

chmod +x print.py
./print.py

4

Bu benim için en iyisi: Bunu betiğin en üstüne ekleyin:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe, makinemdeki python.exe dosyasının yoludur) Sonra komut dosyasını şu yolla çalıştırın:

chmod +x script-name.py && script-name.py

Açıklığa kavuşturmak için, bu Windows'a özgüdür. Ve kullandığım istem Git bash'ı. Süper kullanışlı buluyorum. Özellikle Windows ortamında
peterb

4

Bu benim için çalışıyor:

  1. Yeni bir kabuk dosyası işi oluşturun. Diyelim ki: touch job.shve python komut dosyasını çalıştırmak için komut ekleyin (hatta o python'a komut satırı bağımsız değişkenleri ekleyebilirsiniz, genellikle komut satırı bağımsız değişkenlerimi önceden tanımlıyorum).

    chmod +x job.sh

  2. İçinde job.shaşağıdaki py dosyalarını ekleyin, diyelim:

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

Job.sh çıktısı şöyle görünmelidir:

Done with python_file.py

Done with python_file1.py

Önceden tanımlanmış farklı argümanlarla birden fazla python dosyası çalıştırmam gerektiğinde bunu kullanırım.

Not: Burada olup bitenler hakkında hızlı bir bilgi:

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • Kabuk betiği python_file.py dosyasını çalıştırır ve çalışma zamanında python dosyasına birden fazla komut satırı argümanı ekler.
  • Bu, mutlaka komut satırı argümanlarını da geçmeniz gerektiği anlamına gelmez.
  • python python_file.pyBasit ve basit : gibi kullanabilirsiniz . Ardından, >> bu .py dosyasının çıktısını testpy-output.txt dosyasında yazdırır ve saklar.
  • && , yalnızca yukarıdakiler başarılı bir şekilde yürütüldükten sonra çalışacak ve isteğe bağlı bir "python_file.py ile tamamlandı" yankısı , çalışma zamanında cli / terminalinize yansıtılacak olan mantıksal bir operatördür .

4

python scriptname.pyÖrneğin şu şekilde çağırabilirsiniz:

# !/bin/bash

python /home/user/scriptname.py 

Ayrıca komut dosyasının çalışma izinlerine sahip olduğundan emin olun.

Düğmesini kullanarak çalıştırılabilir hale getirebilirsiniz chmod u+x scriptname.py.


2

Bunu kullanıyorum ve iyi çalışıyor

#/bin/bash
/usr/bin/python python python_script.py

1

Diğer gönderiler her şeyi söylediğinden (ve aşağıdakileri ararken bu gönderi üzerine tökezledim).
Başka bir python betiğinden bir python betiğinin nasıl yürütüleceği aşağıda açıklanmıştır:

Python 2:

execfile("somefile.py", global_vars, local_vars)

Python 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

ve diğer bazı sağlayarak argümanlar sağlayabilirsiniz sys.argv

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.