使用Python从shell脚本中提取错误消息



我有一个简单的Python脚本,它将使用Python中的subprocessmdoule执行shell脚本。

下面是我的Python shell脚本,它正在调用testing.shshell脚本,并且运行良好。

import os
import json
import subprocess
jsonData = '{"pp": [0,3,5,7,9], "sp": [1,2,4,6,8]}'
jj = json.loads(jsonData)
print jj['pp']
print jj['sp']
os.putenv( 'jj1',  'Hello World 1')
os.putenv( 'jj2',  'Hello World 2')
os.putenv( 'jj3', ' '.join( str(v) for v in jj['pp']  ) )
os.putenv( 'jj4', ' '.join( str(v) for v in jj['sp']  ) )
print "start"
proc = subprocess.Popen('testing.sh', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdout, stderr) = proc.communicate()
if stderr:
print "Shell script gave some error"
else:
print "end" # Shell script ran fine.

下面是我的testing.shshell脚本-

#!/bin/bash
for el1 in $jj3
do
echo "$el1"
done
for el2 in $jj4
do
echo "$el2"
done
for i in $( david ); do
echo item: $i
done

现在我的问题是-

如果你看到我的Python脚本,我正在打印start,然后执行我的shell脚本,如果在执行我的shell脚本时出现任何错误,那么它不会打印end。在上面的示例中,它不会打印出end,因为存在错误。

  1. 首先,这是解决这类问题的正确方法吗?基本上,我想先打印start,如果shell脚本执行成功,那么我想打印end。但如果不管什么原因,我的shell脚本没有成功执行,那么我就不打印end
  2. 其次,使用这种方法,我看不到我的echo语句从shell脚本打印到控制台上?这是否意味着,我的shell脚本正在执行,但不知怎么的,它没有打印在控制台上
  3. 第三,是否有可能从shell脚本中提取错误消息,这意味着shell脚本失败的原因是什么

1。是的,您的代码似乎符合您的意图。

2.正确。因为使用了stdout=subprocess.PIPEstderr=subprocess.PIPE,所以在控制台上看不到bash脚本的输出。但是,当调用communicate()时,stdout和stderr的输出将在变量stdoutstderr的下一行捕获。

3.是的,您已经这样做了:只需检查stderr变量的内容,它就会保存shell脚本打印的所有错误消息。

相关内容

  • 没有找到相关文章

最新更新