从python代码调用shell脚本,没有任何返回值(0)或新行

时间:2016-01-25 01:17:55

标签: python bash python-2.7 shell

假设我的shell脚本在运行时返回值“19”。我想将该值(没有任何返回值0或空行)存储到我的python代码中的变量中以供稍后使用。

这里有很多问题与我的相似,但我还没有找到一个解决方案,其中shell脚本返回'19'而没有额外的返回值0或新行。

在python代码中使用subprocess.call('bash TestingCode', shell=True)可以完全返回我想要的内容,但是当我将此命令存储在变量中然后打印变量时,它会打印出额外的0。

answer = subprocess.call('bash TestingCode', shell=True)
print answer

>>19
>>0

然后我尝试了这个问题的一个例子:How to return a value from a shell script in a python script

但是它会给我一个额外的空行。

answer = subprocess.check_output('bash TestingCode', shell=True)
print answer
>>19
>> 

我真的很感激帮助!

更新: TestingCode脚本

#!/bin/bash
num=19
echo $num

3 个答案:

答案 0 :(得分:2)

就这样称呼它:

import subprocess

answer = subprocess.check_output('bash TestingCode', shell=True)
answer = answer.rstrip()

原因是您的shell脚本正在打印19后跟一个新行。因此,subprocess.check_output()的返回值将包含shell脚本生成的新行。调用str.rstrip()将删除任何尾随空格,在这种情况下只留下'19'

答案 1 :(得分:0)

尝试调用subprocess.Popen,返回时不返回0。

答案 2 :(得分:0)

这对我有用。我怀疑你的shell脚本中有一个导致输出的问题。

$ cat test.sh
#!/bin/sh
exit 19
(0) austin@Austins-Mac-8:~
$ python2.7
Python 2.7.10 (default, Aug 22 2015, 20:33:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call('bash test.sh', shell=True)
19
>>>