2011-07-16 13 views

cevap

8

, bu çalışır:

... 
python -c "import test; test.printfoo('$foo')" 
... 

Güncelleme: Eğer düşünürsen

dize içerebilir Aşağıdaki yorumda @Gordon tarafından belirtildiği gibi tek tırnak işaretleri ('), Bash içinde kolayca bu tek tırnak kaçabilir. İşte bu durumda bir alternatif çözüm:

... 
python -c "import test; test.printfoo('"${foo//\'/\\\'}"');" 
... 
+2

$ foo, herhangi bir tek tırnak veya başka karakterler içeren python yorumlarını içeriyorsa bu, ilginç bir şekilde başarısız olacaktır. @ Adam'ın çözümü daha sağlam ... –

2

:

$cat test.sh 
#!/bin/bash 

foo="hi" 
python -c 'import test; test.printfoo($foo)' 

$cat test.py 
#!/bin/python 

def printfoo(str): 
    print str 

ben bash komut dosyası çalıştıran deneyin, bir sözdizimi hatası alıyorum: aşağıdaki gibi bir şey yapmak istiyorum bash. PHP'ye benzer. Böylece

$ foo=bar 
$ echo $foo 
bar 
$ echo "$foo" 
bar 
$ echo '$foo' 
$foo 

, bu çalışması gerekir:

python -c "import test; test.printfoo($foo)" 
+0

ayrıca alır, ama şimdi NameError diyor piton tarafında bir hata, var: adı 'hi' tanımlı değil. – Ravi

2

argv elleçleme ile yapın. Bu şekilde onu almak zorunda değilsiniz, daha sonra bunu tercümandan çalıştırın.

Sen Python ortam değişkenleri erişmek için os.getenv kullanabilirsiniz

import sys 

def printfoo(string): 
    print string 

if __name__ in '__main__': 
    printfoo(sys.argv[1]) 

python test.py testingout 
+0

Doğrudan printfoo'yu aramayı umuyordum çünkü bashtan çağrılması gereken argümanları kullanan pek çok başka python işlevim var. Eğer hepsinden öte ana gidersem daha karmaşık olurdu. – Ravi

12

test.py:

import os 
import test 
test.printfoo(os.getenv('foo')) 

Ancak sırayla ortam değişkenleri için oluşturduğu herhangi süreçlere Bash den geçirilecek, Onları export builtin: 012 ile dışa aktarmanız gerekirOrtam değişkenlerini kullanmaya alternatif olarak, parametreleri doğrudan komut satırına iletebilirsiniz. -c command sonra Python geçirilen Herhangi seçenekleri sys.argv diziye yüklenen olsun: Kısacası

# Pass two arguments 'foo' and 'bar' to Python 
python - foo bar <<EOF 
import sys 
# argv[0] is the name of the program, so ignore it 
print 'Arguments:', ' '.join(sys.argv[1:]) 
# Output is: 
# Arguments: foo bar 
EOF 
İlgili konular