从Shell脚本向Python传递参数

16

我写了一个类似这样的小型shell脚本:

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

我的 python_code1.py 程序长这样:

import 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的输出只是1。也就是说,只传递了参数的第一个字母。

为什么会发生这种情况?我想将整个字符串传递给Python代码。

2个回答

36
如果参数之间有空格并且参数没有被引号包含,那么Python会将其视为两个不同的参数。这就是为什么Python代码中print data的输出结果只是1的原因。请查看以下输出。
[root@dsp-centos ~]# python dsp.py Dinesh Pundkar
In python code
Dinesh
[root@dsp-centos ~]# python dsp.py "Dinesh Pundkar"
In python code
Dinesh Pundkar
[root@dsp-centos ~]#

因此,在您的shell脚本中,将$var1放在引号中。

shell脚本内容(a.sh):

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

Python 代码内容(dsp.py):

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

输出:

[root@dsp-centos ~]# sh a.sh
In python code
Dinesh Pundkar

4

使用Join和列表切片

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接