2

Can xonsh pipe subprocess output to a python function?

int($(ls|wc -l)) > 20

as

ls | wc -l  | int > 20

I can get close

from toolz import pipe
pipe($(ls |wc -l),int) > 20

this comes searching ways to port

# bash
[ $(ls |wc -l ) -gt 20 ] && echo busy dir
# xonsh
test @$(ls |wc -l)  '-gt' 20 and echo busy dir
# xonsh with more python 
len(`[^.].*`) > 20 and echo busy dir

But generally, I'm hoping for an infix operator a la magrittr's forward pipe %>% or coconut's |>

Will
  • 1,206
  • 9
  • 22

2 Answers2

1

Someone did the trick in the github issue comment using sspipe, https://github.com/xonsh/xonsh/issues/1336#issuecomment-502049121, but we can do it without it:

'Busy dir' if int($(ls | wc -l))>20 else ''
  • was hoping to find a way to make iterative prev history + pipe more ergonomic (try `ls`, then `ls|wc -l`, then, in my fantasy, `ls|wc -l| > 20`) rather than having to jump around the line and track open/close parens (`ls |wc -l`, then `int($(ls | wc -l))>20` is trivial but still cumbersome) total aside: looks like the sspipe code from the github issue is counting characters not files: `ls | wc -l` == `88`; ` len(`[^.].*`)` == `88`; `$(ls) | p(len)` == `1237` – Will Oct 10 '22 at 17:17
0

coconut supports xonsh

Coconut integrates with xonsh to allow the use of Coconut code directly from your command line. To use Coconut in xonsh, simply pip install coconut and then run xontrib load coconut from xonsh or add xontrib load coconut to your xonshrc file.

https://coconut.readthedocs.io/en/latest/DOCS.html#xonsh-support

Will
  • 1,206
  • 9
  • 22