我正在编写一个shell脚本test.sh,其中我将json_str变量定义为
json_str='{"ecommerce": "master","app_compat":"master"}'
我将此变量传递给python脚本命令 - >
sudo python3 release.py $json_str
在python脚本中我打印输入的值是打印这个
{"ecommerce":
不是整个字符串。 我无法更改输入字符串,因为它来自无法更改的服务器。 解决方法是
json_str='{\"\ecommerce": \"\master",\"
\app_compat":\"\master"\}'
你可以建议另一种方法来做这件事,因为我无法改变输入字符串。
内部python脚本
input_release=sys.argv[1]
print("here input %s" %input_release)
shell脚本
#!/usr/bin/env bash
echo "Inside bash script"
json_str='{"ecommerce": "master","app_compat":"master"}'
echo "$json_str"
sudo python3 release.py $json_str
答案 0 :(得分:0)
由于JSON中的空格而中断。您可以通过引用它将其作为单个参数传递:
sudo python3 release.py "$json_str"
但是如果你不能改变CLI,你可能会尝试在Python中重新创建它:
sudo python3 release.py $json_str
...
import sys
json_data = " ".join(sys.argv[1:])
print("JSON data: ", json_data)
# JSON data: {"ecommerce": "master","app_compat":"master"}
虽然要注意你不能以这种方式考虑所有的shell扩展,而CLI并不是真正用于传递类似JSON的大型结构,所以为什么不将它作为环境变量传递,即在你的shell脚本中:
#!/usr/bin/env bash
json_str='{"ecommerce": "master","app_compat":"master"}'
export $json_str
sudo python3 release.py
并在您的Python脚本中:
import os
json_data = os.environ["json_str"]
print("JSON data: ", json_data)
# JSON data: {"ecommerce": "master","app_compat":"master"}
答案 1 :(得分:0)
问题既不是Python也不是Json,而是shell本身。当您使用以下行提供shell时:
sudo python3 release.py $json_str
这是按顺序发生的事情:
sudo python3 release.py {"ecommerce": "master","app_compat":"master"
sudo
2:python3
3:release.py
4:{"ecommerce":
5:"master","app_compat":"master"
因为它们之间的空间:
和"master"
避免分裂的常用方法是将要替换的变量括在引号中。不幸的是你不能在这里做,因为字符串已经包含引号。
我只能想象两个解决方案:
确保替换字符串不包含未转义的空格(单个\
,因为它出现在简单的引号内):
json_str='{"ecommerce":\ "master","app_compat":"master"}'
使用标准输入来读取字符串
Python3:input_release = input()
或Python2:input_release = rawinput()
shell:echo $json_str | sudo python release.py
,或者带有此处的文档:
sudo python release.py <<END
$json_str
END