> But Python isn't a language that needs everything to be done with
command invocations and pipes. If you're doing long pipelines like
this, there's probably something wrong. Why use external programs to do
things that Python can do far more viably itself?

That's a really good point. I think the main use case is scripts run from
the command line, like pip or virtualenv, for example. It's uncommon enough
that's it's definitely not necessary.
The "grep hello | sort | cat file.txt" example is just that: an example.
I'm no expert on system calls from within Python. Does it open a new
process that Python doesn't have to wait on? If so, it might be more viable.

On Thu, Aug 26, 2021, 9:22 PM Chris Angelico <ros...@gmail.com> wrote:

> On Fri, Aug 27, 2021 at 1:15 PM Finn Mason <finnjavie...@gmail.com> wrote:
> >
> > > Is this too magical?
> > > result = run('cat file.txt') | run('sort) | run('grep hello',
> capture_output=True, text=True).stdout
> >
> > Interesting idea, especially overloading the union/pipe operator (|). I
> like it a lot. It reminds me of pathlib.Path (which is a wonderful tool),
> with its slash operator overload.
> > Python is supposed to be easy to read and understand, and anything that
> makes complicated system stuff less messy is welcome, I think.
>
> It's perfectly legal to do this sort of thing, but it doesn't really
> belong in the stdlib (more on that later).
>
> > Another idea (which I am less in favor of) is a more functional
> approach, like:
> >
> > run('grep hello', run('sort', run('cat file.txt')))
> >
>
> That's a bit more viable. I'd be inclined to have a keyword argument
> here, for instance:
>
> run('grep hello', stdin=run('sort', sttdin=run('cat file.txt')))
>
> but I agree, it makes good sense to have an argument able to take a
> variety of data types, including another program's output.
>
>
> But Python isn't a language that needs everything to be done with
> command invocations and pipes. If you're doing long pipelines like
> this, there's probably something wrong. Why use external programs to
> do things that Python can do far more viably itself?
>
> with open('file.txt') as f:
>     result = [l.strip("\r\n") for l in sorted(f) if "hello" in l]
>
> Trying to make a more Pythonic syntax for an operation that Python
> does better in a completely different way is a bit of a half-hearted
> solution. I'd recommend either sticking to a full "run the shell and
> hand it this command line", or going the whole way and doing the job
> in Python.
>
> ChrisA
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/WUZH3G46CUIEMMVOKAMOG6W5KKXB5RS5/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/WOJPANCRKCDPHQKWDTZVPTYRAETJ4H7T/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to