擅长:python、mysql、java
<p>问题不在于Python和Json,而在于shell本身。当您向shell输入以下行时:</p>
<pre><code>sudo python3 release.py $json_str
</code></pre>
<p>以下是按顺序发生的事情:</p>
<ul>
<li>变量被其值替换为<code>sudo python3 release.py {"ecommerce": "master","app_compat":"master"</code></li>
<li>由于<code>:</code>和{<cd8>}之间的空格,该行被标记为单词:1:<code>sudo</code>2:<code>python3</code>3:<code>release.py</code>4:<code>{"ecommerce":</code>5:<code>"master","app_compat":"master"</code>,因为<code>:</code>和{<cd8>}</li>
</ul>
<p>避免拆分的常见方法是用引号将要替换的变量括起来。不幸的是,您不能在这里这样做,因为字符串已经包含引号。</p>
<p>我只能想象两种解决方案:</p>
<ol>
<li><p>确保替换字符串不包含未经转义的空格(一个<code>\</code>,因为它出现在简单引号内):</p>
<pre><code>json_str='{"ecommerce":\ "master","app_compat":"master"}'
</code></pre></li>
<li><p>使用标准输入读取字符串</p>
<p>Python3:<code>input_release = input()</code>或Python2:<code>input_release = rawinput()</code></p>
<p>shell:<code>echo $json_str | sudo python release.py</code>,或使用以下文档:</p>
<pre><code>sudo python release.py <<END
$json_str
END
</code></pre></li>
</ol>