擅长:python、mysql、java
<p>使用bash <code>here document</code>的一个问题是,脚本随后会在<code>stdin</code>上传递给Python,因此如果您想使用Python脚本作为过滤器,它会变得很笨拙。一种替代方法是使用<code>bash</code>的<code>process substitution</code>,如下所示:</p>
<pre><code>... | python <( echo '
code here
' ) | ...
</code></pre>
<p>如果脚本太长,也可以在paren中使用<code>here document</code>,如下所示:</p>
<pre><code>... | python <(
cat << "END"
code here
END
) | ...
</code></pre>
<p>在脚本中,您可以像平常一样从/到标准i/o进行读/写(例如,<code>sys.stdin.readlines</code>以吸收所有输入)。</p>
<p>另外,<code>python -c</code>也可以像其他答案中提到的那样使用,但这里是我希望在遵循Python的缩进规则(<a href="https://unix.stackexchange.com/a/163998/6475">credits</a>)的同时,能够很好地格式化的方法:</p>
<pre><code>read -r -d '' script <<-"EOF"
code goes here prefixed by hard tab
EOF
python -c "$script"
</code></pre>
<p>只要确保文档中每行的第一个字符都是硬标签。如果你必须把它放在一个函数中,那么我使用下面的技巧,让它看起来对齐:</p>
<pre><code>function somefunc() {
read -r -d '' script <<-"----EOF"
code goes here prefixed by hard tab
----EOF
python -c "$script"
}
</code></pre>