簡體   English   中英

如何在 xonsh shell 中將 Python 構造的輸出通過管道傳輸到另一個命令?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM