2016-08-30 6 views
1

나는 tclsh/소원 작성된 매우 성가신 GUI를 가진 소프트웨어 패키지가 있습니다. 터미널을 통해 소프트웨어를 제어하고이를 실행하기위한 스크립트를 만들고 싶습니다. wish GUI는 꽤 길다 (37000 회선 이상). 그래서 나는 자세하게 읽고 각각의 명령 행 인터페이스를 작성하는 것을 피하고 싶다. 내가 누를 버튼의 순서와 입력 할 필드의 순서를 이미 알고 있다고 가정 해 보겠습니다. 터미널을 통해이 GUI GUI 괴물을 제어 할 수있는 방법이 있습니까? 내가 어떤 터미널 입력을 또는 % 프롬프트를 표시하지 않을 -f 플래그를 제거하더라도윈도우 쉘 (wish/tclsh) GUI를 우회하여 대신 터미널을 사용하는 방법은 무엇입니까?

exec wish -f $PROGRAM_PATH/program.tcl -n program wish $PROGRAM_PATH $* 

:

GUI를

을 통해이라고합니다. 나는 -n 플래그 뒤에 오는 부분을 이해하지 못한다. 프로그램을 제거하면 프로그램이 동일하게 실행됩니다.

즉 호출은 단순히

wish $PROGRAM_PATH/program.tcl 

같은 일을한다.

나는뿐만 아니라 -file 플래그를 시도하고 명령을 외부 파일을 제공하지만, 모든 내부 변수와 루틴을 정의되기 전에 입력이 명령을 시도 소원, 그래서 알 수없는 명령의 결과.

사람이 소원 스크립팅에 대한 몇 가지 유용한 소스에 날 지점 수 있습니까?

답변

1

당신은 입력 필드 전화부이있는 프로그램 prog.tcl, 및 버튼 .B 한 경우 :이 같은 스크립트를 사용할 수 있습니다

#!/usr/bin/tclsh 

package require Tk 

set e {} 

proc dump { } { 
    global e 
    puts $e 
} 

ttk::label .l -text Entry: 
ttk::entry .e -textvariable e 
grid .l .e 
ttk::button .b -text button -command dump 
grid .b -column 2 

실행하기 :

#!/usr/bin/tclsh 

package require Tk 

source prog.tcl 

set tv [.e cget -textvariable] 
set $tv mydata 
.b invoke 
update 

을 소스가있는 경우에만 작동합니다. 대신 입력 필드에 데이터를 입력하는 이벤트를 생성

, 그냥 관련 변수를 가져올하고 필요한 값으로 설정하는 것이 훨씬 쉽다. 단추는 쉽다. 콤보 박스 (드롭 다운), 체크 박스, 스케일 및 라디오 버튼이 함께 작동합니다. 필자는 자동화 된 테스트를 위해이 방법들을 광범위하게 사용하며 작동합니다.

당신은 여전히 ​​항목 및 버튼 이름을 찾기 위해 코드를 읽을해야합니다.

Windows를 사용하는 경우 autohotkey 프로그램을 사용해 볼 수도 있습니다. 내가 찾던 정확히

+0

완벽한. 고맙습니다. – lixpas

+0

GUI를 전혀 표시하지 않고 명령 만 실행할 수 있습니까? 그래서 나는 X 포워딩이 필요 없다. 컴퓨터 노드에 직접 로그인하지 않는 컴퓨터 클러스터에서이 프로그램을 사용하고 싶습니다. – lixpas

+0

나는 그렇게 생각하지 않는다. 아마도 가상 X 디스플레이가 사용될 수 있습니다 (Xvfb). –