> 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/