Bash

在作為 heredoc 傳遞的 python 腳本中使用管道內容

  • February 18, 2021

我知道 here-doc 進入標準輸入。我看到 here-doc 在來自管道的內容之前優先進入標準輸入(見下文)。

但也許有一個技巧可以讓它發揮作用?

總而言之,我想避免創建腳本文件。我知道-cpython中有開關,但也不想把所有東西都放在一行中。

echo values | python3 <<SCRIPT
with open('/dev/stdin') as f:
   print(f.read()) # -> "values"
SCRIPT

目前的輸出是腳本本身:

with open('/dev/stdin') as f:
   print(f.read()) # -> "values"

你不能有兩個標準輸入——python 怎麼知道程式碼在哪裡停止,內容從哪裡開始?

這是使用Process Substitution的解決方法:

echo values | python3 <(cat <<SCRIPT
with open('/dev/stdin') as f:
   print(f.read()) # -> "values"
SCRIPT
)

引用自:https://unix.stackexchange.com/questions/635115