2016-09-14 159 views
1

我寫了一個小的shell腳本,看起來像:從Shell腳本傳遞參數到Python

cd models/syntaxnet 
var1=$(jq --raw-output '.["avl_text"]' | syntaxnet/demo.sh) 
echo $var1 
python /home/sree/python_code1.py $var1 

python_code1.py樣子:

進口SYS

data = sys.argv[1] 
print "In python code" 
print data 
print type(data) 

現在,輸出在我的shell腳本中echo $ var1正是我想看到的:

1 Check _ VERB VB _ 0 ROOT _ _ 2 out _ PRT RP _ 1 prt _ _ 3 this _ DET DT _ 4 det _ _ 4 video _ NOUN NN _ 1 dobj _ _ 5 about _ ADP IN _ 4 prep _ _ 6 Northwest _ NOUN NNP _ 7 nn _ _ 7 Arkansas _ NOUN NNP _ 5 pobj _ _ 8 - _ . , _ 7 punct _ _ 9 https _ X ADD _ 7 appos _ _

但是Python代碼中print data的輸出是jus 1。即參數的第一個字母。

這是怎麼發生的?我想將整個字符串傳遞給python代碼。

回答

3

如果在參數和參數之間沒有空格不在引號內,則python將視爲兩個不同的參數。

這就是爲什麼打印數據在Python代碼的輸出僅僅是1

檢查下面的輸出。

[[email protected] ~]# python dsp.py Dinesh Pundkar 
In python code 
Dinesh 
[[email protected] ~]# python dsp.py "Dinesh Pundkar" 
In python code 
Dinesh Pundkar 
[[email protected] ~]# 

因此,在你的shell腳本,把$ VAR1引號。外殼腳本的

含量(a.sh):Python代碼

var1="Dinesh Pundkar" 
python dsp.py "$var1" 

含量(dsp.py

import sys 
data = sys.argv[1] 
print "In python code" 
print data 

輸出:

[[email protected] ~]# sh a.sh 
In python code 
Dinesh Pundkar 
+0

這工作。謝謝你的解釋! – kskp

0

使用加入和列表切片

import sys 
data = ' '.join(sys.argv[1:]) 
print "In python code" 
print data 
print type(data)