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