[英]How to pipe In the xonsh shell the output of a Python construct to another command?
在xonsh
shell 中,如何將 Python 構造的輸出通過管道傳輸到另一個命令? 想要的例子:
for v in ${...}: print ("{}={}".format(v,${v})) | head
在這個for v in ...
是 Python 構造, head
是我想通過管道傳輸其輸出的命令。
上面的命令行不起作用; 我總是收到以下錯誤:
NameError: name 'head' is not defined
看起來xonsh
沒有為管道符號保留 Python 模式(請參閱xonsh 文檔中的“管道” )。 - 那么,如何指示xonsh
將此處的管道字符理解為子xonsh
模式符號?
Xonsh 不支持將任意 Python 代碼通過管道傳輸到子進程,因為子進程只接受字符串輸入。 因此,xonsh 只接受字符串、包含字符串(例如字符串列表)或返回字符串(例如函數)的 Python 表達式。 xonsh 只接受子進程的表達式的原因是子進程本身是作為表達式實現的。
上面示例代碼的問題在於您試圖將語句(特別是 for 語句)通過管道傳輸到子進程(即表達式)中。 這在純 Python 中在語法上無效,在 xonsh 中也不有效,因為不清楚|
哪些語句。 |
后面的表達式應該適用於。
要解決上述問題,您需要將 for 循環更改為表達式。 以下是幾個示例:
# use a list comprehension
echo @(["{}={}\n".format(v,${v}) for v in ${...}]) | head
# use a function
def f():
for v in ${...}:
print("{}={}".format(v,${v}))
@(f) | head
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.