从shell脚本返回值到python脚本



我正在努力实现以下目标:

  1. 我有一个python脚本,它调用一个shell脚本并传递一个参数。Shell脚本使用在某个位置传递的参数创建一个tar.gz文件。

  2. 现在,shell脚本应该传递这样创建的tar.gz的名称和位置。Python脚本使用它来形成JSON并传递给其他代码。

  3. 除此之外,我还想添加一些检查,以确保如果生成了tar.gz,则只向python返回值,否则不会。

这是代码:

Python脚本:

#!/usr/bin/python
import json
import subprocess
json_data='{"name": "StackOverflow", "uid": "8fa36334-ce51"}'
data = json.loads(json_data)
for keys,values in data.items():
  print(keys)
  print(values)
 UID = data.get('uid')
 rc = subprocess.check_output(["/home/cyc/Cyc-    
        Repo/cyc_core/cyc_platform/src/package/cyc_bsc/scripts/test.sh",    
        UID])
 print rc
 if rc != 0:
   print "failed for passed in uid"
data_op = {}
data_op['pathTOCompressfile'] = 'value_should_be_return_from_shell'
data_op['status'] = 'OK'
json_data_op = json.dumps(data_op)
print json_data_op

shell脚本:

#!/bin/bash
if [ "$1" != "" ]; then
   uid=$1
   echo "Positional parameter 1 contains something $1"
else
   echo "Positional parameter 1 is empty"
fi
LOG_TMP="tmp_log_file_location"
log_location="log_file_location"
filename="${log_location}/$uid.tar.gz"
echo $filename
tar -zcvf $filename -C $LOG_TMP/dc .

这是我无法理解的:

  1. 如果tar-zcvf命令成功,如何将变量"filename"的值传回python脚本
  2. 在python脚本中,我如何验证文件名的取值并使用该值创建JSON
  3. 在无法生成值的情况下,STATUS在JSON中(在python中)会失败,所以也要捕获它

您的shell脚本将生成的文件的名称写入标准输出,因此您的问题归结为如何捕获从Python启动的子进程的stdandard输出。这已经在这里回答了。顺便说一句,当询问有关Python的问题时,最好始终指定您正在使用的Python版本。

然而,在您的情况下,我会重新设计一下您的shell脚本:

脚本不仅输出生成的文件名,还输出关于"位置参数"的消息,这意味着无论是消息还是有效输出,都必须在脚本中将它们分开。您可以将消息发送到标准错误,以将它们分开。

顺便说一句,如果没有位置参数,则生成的文件名仅为.tar.gz。这真的是你想要的吗?如果没有参数,做一个exit 1不是更好吗?

最新更新