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