You are here

channel로 리다이렉션하는 것과 smtp사용법에 관한 질문

tkcon비슷한 것을 윈도우즈에서 동작하도록 만들려다가 많이 막히는데요,
이루려는 게 cmd.exe를 콘솔을 쓰지 않고 (내부적으론 써도 상관없지만) 온전하게 텍스트 위젯으로 리다이렉트 시킬 수 있을까요?
wish환경에서 그냥 파이프를 쓰면 "사용 가능한 저장소가 부족하여 이 명령을 처리할 수 없습니다"문제가 나서...
twapi로 콘솔을 할당하면 제대로 동작하긴 하는데 텍스트 위젯으로 어떻게 전송해야 할지를 잘 모르겠어서요.

지금 우회적으로 쓰는 방법이 채널을 쓰는 건데요,
exec >@ [lindex [chan pipe] 1] 이런 식으로 지금 받고 있는데, 다른 채널하고 같이 쓰면 문제를 일으킬 때가 많더라고요..
실제 코드는 chan pipe -> refchan or transchan -> chan pipe(태그 구분 용도) -> 텍스트 위젯같은 식으로 동작하는데,
refchan은 OS handle이 없다느니 (그래서 맨 앞에 chan pipe를 넣게 된거고), 쓴다 해도 지금 이상하게 데이터가 손실이 발생하고
transchan을 쓰니 puts를 해도 인자가 잘못되었다느니.. 하는 바람에 막혔습니다.

이번에 만들려고 했던 부분인데요, 본래 채널로 가는 데이터를 variable에 복사해 저장하려고 했는데 이것도 생각대로는 안 되더라고요.
wish환경하고 tclsh환경하고 테스트 했을 때 결과가 다르고 윈도우즈인지 우분투인지에 따라서도 결과가 달라서... 원래 이럴 수 있는 건지도 좀 의문이예요.
이게 error writing "file2ebf9c8": invalid argument같은 에러를 일으킬 때도 있고 puts로 화면에 출력이 안 될때도 있더라고요.
다음 코드에 잘못된 부분이 있나요?

# 변수에 데이터를 담는 채널과 다른 채널을 감시하는 채널 패키지입니다.
# refchan과 transchan을 이용하기 때문에 Tcl 8.6버전을 사용해야 합니다.
package require tcl::chan::variable
package require tcl::transform::observe

# w --> r인 채널을 만들고 r로 읽을 데이터가 있으면 즉시 읽어서 출력합니다.

# 버퍼를 쓰지 않도록 설정했습니다.
lassign [chan pipe] r w
chan configure $r -blocking false -buffering none
chan configure $w -blocking false -buffering none
chan event $r readable "puts \[read $r\]"

# w에 뭘 쓰는지 감시하고 그걸 stock변수에 담도록 했습니다.

set vc [tcl::chan::variable stock]
set ob [tcl::transform::observe $w $vc {}]
chan configure $vc -blocking false -buffering none
chan configure $ob -blocking false -buffering none

# 사용 부분입니다.

puts $w "This should be printed on screen with storing on stock variable in my think..."
# puts $w "이 문자열이 출력되면서 동시에 stock에 저장되어야 한다고 생각하는데..."
set stock

# wish환경에서 이 다음에 시간 간격을 두고 인터프리터로 puts $w ...하면 invalid argument에러가 뜹니다.

# tclsh에선 puts로 화면에 출력이 안 되는 경우가 나오고요.

그리고 여기 홈페이지에 있는 smtp사용법을 따라해봤는데, 스팸문제인지 제 지메일로 메일이 전송되지는 않더라고요.
제 메일에 smtp로 불특정다수의 메일이 오도록 할 수 있을까요?