gpt4 book ai didi

python - 从 shell 脚本返回值到 python 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:14 30 4
gpt4 key购买 nike

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

  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 启动的子进程的标准输出。这已被回答 here .顺便说一句,在询问有关 Python 的问题时,最好始终指定您正在使用的 Python 版本。

但是,对于您的情况,我会稍微重新设计一下您的 shell 脚本:

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

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

关于python - 从 shell 脚本返回值到 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37123556/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com