将字符串从Python返回到Shell脚本

时间:2017-03-15 11:53:20

标签: python bash python-2.7 shell

我有Python代码:

x = sys.argv[1]
y = sys.argv[2]
i = sofe_def(x,y)

if i == 0:
    print "ERROR"
elif i == 1:
    return str(some_var1)
else:
    print "OOOps"
    num = input("Chose beetwen {0} and {1}".format(some_var2, some_var3))
    return str(num)

我必须在shell脚本中执行此脚本并在shell变量中返回字符串,如:

VAR1="foo"
VAR2="bar"
RES=$(python test.py $VAR1 $VAR2)

不幸的是它不起作用。由于代码中有大量的print和input(),stderr,stdout和stdin的方式也不起作用。那我怎么解决我的问题呢?谢谢你的回答

2 个答案:

答案 0 :(得分:3)

这甚至不是有效的Python代码;你在函数之外使用return。你不会return在这里,只是print声明。

x, y = sys.argv[1:3]
i = sofe_def(x,y)

if i == 0:
    print >>sys.stderr, "ERROR"
elif i == 1:
    print str(some_var1)
else:
    print >>sys.stderr, "OOOps"
    print >>sys.stderr, "Choose between {0} and {1}".format(some_var2, some_var3)
    num = raw_input()
    print num

(注意其他一些变化:

  1. 将您的错误消息写入标准错误,以避免被捕获。
  2. 在Python 2中使用raw_input,而不是input
  3. 然后你的shell

    VAR1="foo"
    VAR2="bar"
    
    RES=$(python test.py "$VAR1" "$VAR2")
    

    应该有效。除非你有充分的理由,否则请引用参数扩展。

答案 1 :(得分:2)

只需使用打印而不是返回 - bash片段会在STDOUT上预期结果。