2010-03-08 27 views
9

Linux altındaki komut satırından (Bash) bir Python betiği başlatıyorum. Python'u açmam, bir modülü almam ve sonra kod satırlarının yorumlanması gerekiyor. Konsol daha sonra Python'da kalmalıdır (bırakmayın). Bunu nasıl yaparım?Python modülünü Bash'ten içe aktarma

bunun gibi bir takma ad denedi:

alias program="cd /home/myname/programs/; python; import module; line_of_code" 

Ama bu sadece piton başlar ve komutları (hiçbir modül ithalat, tedavi kod hiçbir satır) yürütülmez.

Komut dosyası çalıştırıldıktan sonra Python'u açık tutmam (bırakmama) şartıyla, bunu yapmanın uygun yolu nedir? Çok teşekkürler!

cevap

5

Bunu yapmanın kolay bir yolu "kod" modülü ile geçerli: code.interact() çağrıldığında

python -c "import code; code.interact(local=locals())" 

Bu interaktif kabuk içine düşecek . interact için local anahtar kelime bağımsız değişkeni, oluşturulan yorumlayıcı için varsayılan ad alanını önceden doldurmak için kullanılır; Yerel ad alanını sözlük olarak döndüren yerleşik bir işlev olan locals()'u kullanacağız. Doğru ortamına sahiptir tercüman içine düşer

python -c "import mymodule, code; code.interact(local=locals())" 

:

hakimiyetin böyle bir şey olmazdı.

+0

Bu sadece yarı yolda çalışır. İçe aktarma modülümü 'ithalat kodu'ndan önce veya sonra ekledim, ancak etkileşimli python konsolundayken modülüm mevcut değil. – Morlock

+1

Kod modülünün istediğiniz şeyi yapabildiğini düşünüyorum, ancak ortamı şu şekilde önyükleme yapmalısınız: python -c "import sys, code; code.interact (local = locals())" Bu bana bir komut verir yapmamı sağlayan kabuk: >>> print sys.argv [0] Yapmaya çalıştığınız şeye daha yakın mı? –

+0

Harika! Bu benim için iş yapıyor. Kendi modülüm şimdi de yüklendi (import sys, code, mymodule; ...) Cheers – Morlock

3

Örnek:

python -c "import time ; print 'waiting 2 sec.'; time.sleep(2); print 'finished' " 
+1

@Karol Thx, ancak bu interaktif script beri konsolda Python içinde kalmalıdır. Bunu eklemek için soruyu düzenledim. – Morlock

+1

Eğer 'python' içinde kalmanız gerekiyorsa, tercümanı '-i 'bayrağıyla başlatın. – ChristopheD

+0

-i (c ile birlikte veya c olmadan) denedim ama a: 'python:' import module 'dosyasını açamıyor: [Errno 2] Böyle bir dosya ya da dizin yok' – Morlock

6

kullanımı altyordamı yerine takma

callmyprogram(){ 
    python -i -c "import time;print time.localtime()" 
} 
callmyprogram 
+0

@ ghostdog74 Daha önce hiç bir altprogram kullanmıyorum. Bunu nereye koyayım? .bashrc dosyasında? (.bash_bashrc Linux Mint kullanıyorum çünkü) Nasıl başlatırım? Teşekkürler. – Morlock

+0

herhangi bir komut dosyasına koyabilirsiniz. çünkü .bash_bashrc 'var, oraya koyabilirsiniz. Eğer altprogramı kullanmak istiyorsanız, OP'nin problemini çözen '-i' ve' -c' kombinasyonu için bir 'kaynak .bash_bashrc' – ghostdog74

+0

+ yapın. Bir şeye bir şey koymak asla canını acıtmaz (ek esneklik için), bir takma ad eşit derecede iyi çalışır. Bash terminolojisine dair bir not: 'subroutine', hem _shell functions_ hem de _sourced scripts_ için bir şemsiye terim olarak kullanılır; bu nedenle, buna _ [shell] işlevini çağırmak daha iyidir. – mklement0

İlgili konular