擅长: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>