1
$\begingroup$

I am running a parallelized algorithm using WolframScript and inside the function being passed to the various kernels, I have print statements that track the computation and output the print statements to the terminal. However, whenever a print statement is executed in the slave kernels, its prepended by

From KernelObject[<n>, Local kernel]: 

where <n> is the $KernelID. So for example, a full print statement would return

From KernelObject[6, Local kernel]: <my print statement> 

where in the code, I have Print[<my print statement>]. However, with the number of kernels I have up and running, these prepended messages take up a lot of screen real estate. Is it possible to turn off these From KernelObject... messages so that I just have the original Print statement printed to screen? I am pretty new to Wolframscript so I haven't been able to determine a potential solution myself. Perhaps printing to an output stream?

A minimal working example would be for example

wolframscript -code 'ParallelEvaluate[Print["Hello"]]' 

to be executed in the terminal. In my specific case, all the code is in a Wolfram Language Script file, so I am executing wolframscript -file <myfile>. But the results are identical, the print messages are prepended by the above message.

Thanks

EDIT:

Ok, I've managed to implement this in the standard front end by using Trace[ParallelEvaluate[Print["Test"]], CellPrint], which shows me the exact pattern to overload in the Downvalues of CellPrint. So I simply set

CellPrint[Cell[s_, "Print", label_, ShowCellLabel -> True]] := Block[{}, CellPrint[Cell[s, "Print", ShowCellLabel -> False]]]; 

which is a bit brute force, but it works. However, this doesnt solve my problem. This only works in the FrontEnd, and not when using Wolframscript. Running Trace[ParallelEvaluate[Print["Test"]], Print] in a Terminal using

wolframscript -c 'Trace[ParallelEvaluate[Print["Test"]], Print]' 

Shows me

{HoldForm[Print[From KernelObject[1, Local kernel]:]], HoldForm[Null], HoldForm[Print[d ]], HoldForm[Null]} 

so it looks like wolframscript is inserting the values I want to print into a list of other strings that get printed along with it. I'm not sure how to proceed from this point.

$\endgroup$
3
  • $\begingroup$ You can try to apply the approach described in this answer: "Customize how many of the same warning messages are printed from parallel kernels?" $\endgroup$ Commented Jul 27, 2022 at 11:56
  • $\begingroup$ Thanks for the link. Messing with the backend like this is a whole new territory for me. I tried implementing your solution through that link, but I was unsuccessful. I tried removing the ShowCellLabel and CellLabel options (and tried analyzing with Trace). I noticed, after running Unprotect[CellPrint] that CellPrint has other downvalues that are pretty obscure. If i remove all of them, then ParallelEvaluate[Print["Test"]] evaluates to nothing, theres no print statement, even with the custom definition as the only downvalue. $\endgroup$ Commented Aug 3, 2022 at 12:22
  • $\begingroup$ Perhaps $Post can be used? For example, set $Post=If[Head[#]===String,ToUpperCase[#],#]& and then type "Hello". This will not work for Print results, but perhaps one can adapt it. $\endgroup$ Commented Aug 3, 2022 at 13:51

1 Answer 1

1
$\begingroup$

I've managed to switch off printing of the "From remote kernel:" lines. The basic idea is to redefine Print for them:

Unprotect[Print]; Print["From remote kernel:"] = Null; Protect[Print]; 

I've put it in a "test.m" file as follows:

Unprotect[Print]; Print["From remote kernel:"] = Null; Protect[Print]; ParallelEvaluate[Print["Hello"]] 

Here is how it is executed in the command prompt:

screenshot

P.S. It seems in your case something other is being printed. Hence you can try the following instead:

Unprotect[Print]; Print[expr_] /; ! FreeQ[expr, _KernelObject] = Null; Print[expr_] /; ! FreeQ[expr, s_String /; StringContainsQ[s, "KernelObject"]] = Null; Protect[Print]; 
$\endgroup$
1
  • 1
    $\begingroup$ This solves my problem, thanks for the solution. I combined all three down value definitions in my WL script and I now get the desired result. $\endgroup$ Commented Aug 4, 2022 at 8:53

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.