【问题标题】:Passing arguments to Python from Shell Script从 Shell 脚本向 Python 传递参数
【发布时间】:2017-01-22 17:56:28
【问题描述】:

我写了一个小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 代码。

【问题讨论】:

    标签: python shell arguments


    【解决方案1】:

    如果参数之间有空格并且参数不在引号中,则python将其视为两个不同的参数。

    这就是为什么python代码中打印数据的输出只有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
    

    【讨论】:

      【解决方案2】:

      使用连接和列表切片

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

      【讨论】:

        猜你喜欢
        • 2016-03-20
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        • 1970-01-01
        • 1970-01-01
        • 2015-09-13
        • 2012-11-21
        • 1970-01-01
        相关资源
        最近更新 更多