[erlang-questions] Question re console io in a distributed computation
Ulf Wiger
ulf@REDACTED
Wed Oct 29 21:13:48 CET 2008
Hmm, sorry, I was too fast there. The prompt appeared all right,
but the call never returned. Very interesting...
BR,
Ulf W
2008/10/29 Ulf Wiger <ulf@REDACTED>:
> Well, I'm not quite sure why it didn't work with the group leader
> (I'd have to dig into that), but the 'user' trick ought to work with
> the question as well. Compare:
>
> rpc:call(OtherNode, io, get_line, ["Hello? "])
>
> with
>
> rpc:call(OtherNode, io, get_line, [user, "Hello? "]).
>
> The first version should give a prompt on the originating node,
> and the second version should give it on the target node
> (assuming, of course, that the target node has a shell.)
>
> BR,
> Ulf W
>
> 2008/10/29 David Cabana <drcabana@REDACTED>:
>> I've now played with both of Ulf's suggested approaches (using
>> io:format(user, Fmt, Args), or alternatively, resetting processes group
>> leaders) and have gotten output to go the correct consoles with both
>> approaches. Which of course led to the next hurdle, reading input from the
>> player console.
>>
>> The referee sent a question to the player, which was written to the player
>> node's console. What I want to do is type a response in the player console,
>> have it read, parsed, and sent to the referee, but so far no luck. My
>> responses vanish into the ether, and the referee hangs waiting for players
>> to respond.
>>
>> Here is how I am trying to respond. When the player process receives a
>> question, it writes to the console and tries to read a line:
>>
>> <when I have reset player group leaders>
>> io:fwrite("~n~s", [Question]),
>> Reply = io:get_line(["= "]),
>>
>> <did not mess with group leaders, instead specified the 'user' atom during
>> io>
>> I have also tried:
>> io:fwrite(user, "~n~s", [Question]),
>> Reply = io:get_line(user, ["= "]),
>>
>>
>> It occurs to me that maybe I am going about this the wrong way? Perhaps my
>> approch is misconceived. I have to believe that console IO in a
>> client-server setting is pretty common. Can anyone point me in the right
>> direction?
>>
>> Thank you,
>> David
>>>
>>> On Fri, Oct 24, 2008 at 2:44 PM, Ulf Wiger (TN/EAB)
>>> <ulf.wiger@REDACTED> wrote:
>>>>
>>>> David Cabana skrev:
>>>> >
>>>>>
>>>>> The messages flow correctly, but all the terminal io happens in
>>>>> a single console, the one associated with the referee node.
>>>>>
>>>>> My question is how to get player output written to the console of the
>>>>> corresponding
>>>>> player node?
>>>>
>>>> Use io:format(user, Fmt, Args)
>>>>
>>>> Alternatively, set the group leader of the process to some
>>>> local process - e.g. the group leader of net_kernel
>>>> (found by calling process_info(whereis(net_kernel),group_leader)).
>>>>
>>>> The group leader is the process that's handed all io messages.
>>>> The rpc server deliberately sets the group leader of an rpc
>>>> handler process to that of the caller on the originating node,
>>>> since the remote node may not always have a tty to print to.
>>>> When spawning, the group leader of the spawned process will
>>>> be inherited from the parent. If you spawn a process on
>>>> another node, it will still have the same group leader as
>>>> the parent.
>>>>
>>>> The BIF group_leader(Pid,New_group_leader_pid) sets a new
>>>> leader.
>>>>
>>>> BR,
>>>> Ulf W
>>>
>>
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://www.erlang.org/mailman/listinfo/erlang-questions
>>
>
More information about the erlang-questions
mailing list