Python

2010-01-22 4 views
12

'dan bir işlev döndürme değeri kullanarak kabuk değişkenine değer atamak Bazı değer döndüren bir Python işlevi var fooPy(). (int/double veya string)Python

Bu değeri kullanmak ve bir kabuk komut dosyasına atamak istiyorum. Kabuk komut dosyasında

def fooPy(): 
    return "some string" 
    #return 10 .. alternatively, it can be an int 

fooPy() 

Aşağıdaki şeyler denedim ama bunların hiçbiri işe: Aşağıdaki Örneğin piton fonksiyonudur.

print fooPy() 

ve kabuk komut:

fooShell = python fooPy.py 
#fooShell = $(python fooPy.py) 
#fooShell = echo "$(python fooPy.py)" 

cevap

32

Böyle Python değerinizi yazdırabilirsiniz

fooShell=$(python fooPy.py) 

kabuğunda = etrafında boşluk bırakmamaya dikkat edin senaryo.

+1

teşekkürler, işe yaradı! Ayrıca etrafa boşluklar koyarak bir hata yaptım =. O kadar da düzeltildi. – cppb

+0

+1 "Kabuk betiğinde = boşlukların etrafında durmadığınızdan emin olun" ifadesini kullandı. Bu benim gibi çaylaklardan cehennem rahatsız ediyor. Sys.stdout.write() hakkında ayrıntılı bir cevap ve notlar için –

10

Python kodunuzda, sonucu yazdırmanız gerekir.

import sys 
def fooPy(): 
    return 10 # or whatever 

if __name__ == '__main__': 
    sys.stdout.write("%s\n", fooPy()) 

Sonra kabuğunda, yapabileceğiniz: Ben, Python kodunda bir if __name__ == '__main__' kontrol ekledi

fooShell=$(python fooPy.py) # note no space around the '=' 

Not programınız çalıştırıldığında baskı yalnızca yapılır emin olmak için Komut satırı, onu Python yorumlayıcısından aldığınızda değil.

Ben de :-)

  • print "gerçek programlarda" in Python 2 ve Python 3,
  • farklı davranışa sahip olduğu, tek zaten yerine print ait sys.stdout.write() kullanmalıdır, print yerine sys.stdout.write() kullanılan
+0

+ 1 faydalıdır. Teşekkür ederim! – cppb

+0

Parlak. Tam olarak, –

3

printfooPy tarafından döndürülen değeri kullanmalısınız. Kabuk ikamesi, stdouttan okur. Programınızın son satırını print fooPy() ile değiştirin ve daha sonra bahsettiğiniz ikinci kabuk boru hattını kullanın. İşe yaramalı.

5

Python sys.exit ifadesinden gelen değeri istiyorsanız, kabuk özel değişken $?'da olacaktır.

$ var=$(foo.py) 
$ returnval=$? 
$ echo $var 
Some string 
$ echo returnval 
10 
+0

+1 için sonlandırma kodunu bulmak için aradığım şey ... ama biraz detayı düzeltmeme izin ver. – fortran

+0

Düzeltme için teşekkürler (birçok dilde çalışmanın tehlikeleri vardır). –

+0

hmm..bu "print return_val" çağrısını gereksiz kılar (henüz denemediniz). Teşekkürler, bu yararlı bir bilgi. +1. – cppb