我正在努力实现以下目标:
我有一个python脚本,它调用一个shell脚本并传递一个参数。 Shell脚本使用在某个位置传递的参数创建tar.gz文件。
现在shell脚本应该传递如此创建的tar.gz的名称和位置。 Python脚本使用它来形成JSON并传递给其他代码。
除此之外,我想添加一些检查以确保是否生成tar.gz然后只将值返回给python,否则不返回。
以下是代码:
Python脚本:
Frame
shell脚本:
#!/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
这是我无法理解的:
答案 0 :(得分:0)
您的shell脚本将生成的文件的名称写入标准输出,因此您的问题归结为如何捕获从Python启动的子进程的标准输出。这已被批准here。顺便说一句,在询问有关Python的问题时,总是指定您正在使用的Python版本是个好主意。
但是,在你的情况下,我会稍微重新设计你的shell脚本:
您的脚本不仅会输出生成的文件名,还会输出有关"位置参数"的消息,这意味着您必须在脚本中将它们分开,无论是消息还是有效输出。您可以将消息发送到标准错误,以使它们分开。
顺便说一句,如果没有位置参数,生成的文件名只是.tar.gz
。这真的是你想拥有的吗?如果没有参数,那么做exit 1
会不会更好?