digitalmars.D.learn - How do I get the output of the time bash command?
- Anthony (9/9) Jan 27 2021 I'm trying to read the timed output of a pipeShell command but it
- Arafel (13/27) Jan 27 2021 I'm not sure why you get an empty output, you should get at least the
- Anthony (5/33) Jan 27 2021 Thanks! I think this was the issue.
- Marcone (2/11) Jan 27 2021 writeln(executeShell("time ls")[1]);
- bachmeier (2/23) Jan 27 2021
- Ferhat =?UTF-8?B?S3VydHVsbXXFnw==?= (4/13) Jan 27 2021 Probably, just getting a string output is not enough. It looks a
I'm trying to read the timed output of a pipeShell command but it only results in empty output. Does anyone know why this is? ``` auto p = pipeShell("time ls"); foreach(str; p.stdout.byLine) { writefln("%s",str); } ```
Jan 27 2021
On 27/1/21 10:35, Anthony wrote:I'm trying to read the timed output of a pipeShell command but it only results in empty output. Does anyone know why this is? ``` auto p = pipeShell("time ls"); foreach(str; p.stdout.byLine) { writefln("%s",str); } ```I'm not sure why you get an empty output, you should get at least the `ls` output unless it's an empty directory (or one with only "dot" files). However, in any case `time` returns the timing information through `stderr`, not `stdout`[1]. You can try [2,3] (untested): ``` auto p = pipeShell("time ls", Redirect.stderrToStdout); ``` Best, A. [1]: https://linux.die.net/man/1/time [2]: https://dlang.org/library/std/process/pipe_shell.html [3]: https://dlang.org/library/std/process/redirect.html
Jan 27 2021
On Wednesday, 27 January 2021 at 09:58:18 UTC, Arafel wrote:On 27/1/21 10:35, Anthony wrote:Thanks! I think this was the issue. Turns out that pipeShell uses sh not bash so the "time" program isn't available. When I printed stderr, it showed me the error.I'm trying to read the timed output of a pipeShell command but it only results in empty output. Does anyone know why this is? ``` auto p = pipeShell("time ls"); foreach(str; p.stdout.byLine) { writefln("%s",str); } ```I'm not sure why you get an empty output, you should get at least the `ls` output unless it's an empty directory (or one with only "dot" files). However, in any case `time` returns the timing information through `stderr`, not `stdout`[1]. You can try [2,3] (untested): ``` auto p = pipeShell("time ls", Redirect.stderrToStdout); ``` Best, A. [1]: https://linux.die.net/man/1/time [2]: https://dlang.org/library/std/process/pipe_shell.html [3]: https://dlang.org/library/std/process/redirect.html
Jan 27 2021
On Wednesday, 27 January 2021 at 09:35:21 UTC, Anthony wrote:I'm trying to read the timed output of a pipeShell command but it only results in empty output. Does anyone know why this is? ``` auto p = pipeShell("time ls"); foreach(str; p.stdout.byLine) { writefln("%s",str); } ```writeln(executeShell("time ls")[1]);
Jan 27 2021
On Wednesday, 27 January 2021 at 09:58:25 UTC, Marcone wrote:On Wednesday, 27 January 2021 at 09:35:21 UTC, Anthony wrote:This is the correct answer. The documentation for pipeShell saysI'm trying to read the timed output of a pipeShell command but it only results in empty output. Does anyone know why this is? ``` auto p = pipeShell("time ls"); foreach(str; p.stdout.byLine) { writefln("%s",str); } ```writeln(executeShell("time ls")[1]);Like the functions they wrap, these functions return immediately, leaving the child process to execute in parallel with the invoking process. It is recommended to always call wait on the returned ProcessPipes.pid, as detailed in the documentation for wait.
Jan 27 2021
On Wednesday, 27 January 2021 at 09:35:21 UTC, Anthony wrote:I'm trying to read the timed output of a pipeShell command but it only results in empty output. Does anyone know why this is? ``` auto p = pipeShell("time ls"); foreach(str; p.stdout.byLine) { writefln("%s",str); } ```Probably, just getting a string output is not enough. It looks a little outdated, but there is this library: https://code.dlang.org/packages/dexpect
Jan 27 2021