pipeProcess output to hash string

vino akashvino79 at gmail.com
Tue Sep 12 02:48:02 UTC 2023


On Monday, 11 September 2023 at 22:08:54 UTC, Christian Köstlin 
wrote:
> On 09.09.23 17:44, Vino wrote:
>> Hi All,
>> 
>>    Request your help on how to convert the output of 
>> std.process.pipeProcess to hash string
>> 
>> ```
>> 
>> auto test(in Redirect redirect=Redirect.stdout | 
>> Redirect.stderr) {
>>      import std.process;
>>      import std.digest.crc;
>>      import std.stdio: writeln;
>> 
>>       result = std.process.pipeProcess("whoami" ~ "/?", 
>> redirect);
>>       auto content = result.stdout.readln;
>>       auto hash = crc32Of(content);
>>       return hash;
>> }
>> void main() {
>>    writeln(test);
>> }
>> ```
>> 
>> Output: All writes the below.
>> ```
>> [0, 0, 0, 0]
>> ```
>> 
>> Required: Read the completed output and convert it to a single 
>> hash string.
>> 
>> From,
>> Vino.B
> Good that you could solve your problem already.
>
> Just three remarks:
>
> First I would recommend to use `std.process : execute` instead 
> of
> `pipeProcess` in this usecase, as this will wait properly for 
> the process to exit and it also will collect its output.
>
> Second its always good to test the exit status of the process 
> ... just in case.
>
> Third I would not look at `stderr` too much .. well behaved 
> commandline tools should not put data for machines there.
>
> Kind regards,
> Christian

This is just an example, and more over execute has only stdout, 
where as we need all stdin,stdout,stderr, in order to minimize 
the runtime of log running task we run the stdout and stderr in a 
separate thread, the difference is that for pipeproces we have to 
use wait to ensure that the child process is completed, where as 
for execute we do not need to use wait, as the process exist only 
after the completion.

From,
Vino.


More information about the Digitalmars-d-learn mailing list