[완료]CLI와 GUI를 동시에 돌리는것이 가능한가요?

bloody의 이미지

CLI(command line interface)라고 해서 쉘 커맨드로 프로그램의 작동을 제어하는 방식이 있죠.

예를 들어 다음과 같습니다.
===========================================
prog#1>login
test
*******
prog#1>open new-broadcast
success!
prog#1>close all
all connection closed!
prog#1>exit
===========================================

하지만 위의 방식은 보통 GUI가 없는 프로그램에서
예를들어 리눅스 쉘이나 도스 쉘등에서나 가능하죠.

완전히 GUI 기반인 윈도우즈 프로그램....예를들어 MFC로 만들어진 프로그램이나 JAVA SWING 기반의
프로그램에서는 화면의 버튼/입력창에다가 직접 마우스로 선택해서 작동시켜야 합니다.

저 같은 경우
GUI 프로그램을 그대로 유지하면서 CLI를 작동시키면....
GUI동작과 동일하게 작동시키고 싶은데요..

예를들어 만약 화면에 GUI적인 로그인 창이 떴다면....
다른창의 shell을 통해서 위에서 login 입력한것과 동시에 CLI로 입력해주면
GUI 창에서도 동시에 그런 입력이 되게 하고 싶은데요...

그러니까 GUI와 CLI가 따로 존재하는것이 아니라 동시에 존재하면서 서로 입력한것이 실시간으로 양쪽의 인터페이스에 갱신시켜주고
싶은데요..

그런게 가능하나요? 혹시 이런 프로그램을 보신적이 있으신가요?
어떤 식으로 구현되어야 할까요?

송효진의 이미지

쉘에서 실행하면 그냥 CLI 로 동작하게 하고,
GUI 에는 상단이나 하단에 CLI 입력창 하나 놔두면 어떨까요?
filezilla 같은 ftp client 가 그런식이죠.
명령로그가 주욱 올라가는 창에서 우클릭하면 명령을 직접 입력할 수 있습니다.
연동까지 안가도 충분할 것 같은데요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

bloody의 이미지

말씀하신 것처럼 GUI화면상에 쪽창 같은데에 쉘 명령어를 입력해서 작동하는 방식은
전에도 본적이 있습니다. 모 게임에서도 그런기능을 본적이 있습니다.

하지만 제가 원하는 방식의 핵심은 그런게 아닙니다.
CLI를 입력하든 GUI로 입력하든... CLI와 GUI양쪽에 동시에 실시간으로 반영되어야 한다는것이지요.

즉 GUI에 버튼을 누르면 CLI에서도 관련 명령어가 실행되어야 한다는 것이지요.
사실 이것은 쉬울겁니다. 버튼 눌렀을 때 CLI에서도 관련 명령을 실행한것처럼 보여주면 되지요..

근데 그 반대로 CLI에서 명령을 입력했을때 GUI적으로 화면에 입력을 하고 버튼을 눌러주는게 가능한건가요?

winner의 이미지

하지만 입력과정을 일일이 보여주는 것은 만들기도 까다롭고 사용자 측면에서 좀 불편할 것 같군요.
CLI의 동작방식을 이해시키는 용도로는 괜찮을 것 같습니다만...

송효진의 이미지

누르는 동작이 굳이 보여질 필요까진 없을 것 같으니,
서버 클라이언트 형태로 만들면 될것 같네요.

GUI 든 CLI 든 명령 로그 가 보이게 하면, 어디서 무슨 명령을 내렸는지는 계속 볼 수 있겠죠.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

magingax의 이미지

인터프리터를 원하시는것 아니신지?
원하시는게 맞는지 모르겠지만.
화면에 UI 가 떠있는 상태에서..

CG-USER(2): (push-play)
하면 play 버튼을 누른것과 같은 작업이 되고.

CG-USER(2): (ask-user-for-existing-pathname)
이라고 치면 일반적은 파일경로 입력창이 뜹니다.
GUI 와 컴맨드 창에서 이루어지는 작업은 연동되 있고요..
LISP 에서는 이런 기능이 구현되 있습니다.
아마 다른 인터프리터 기반언어들도 대부분 가능할껍니다.

LISP 사용자모임
http://cafe.naver.com/lisper

LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr

bloody의 이미지

lisp의 기능에 놀라울 따름입니다.

제가 본 질문을 드렸던 이유는

cli를 사용하면 테스트가 매우 쉽게 됩니다.
텍스트 기반이기 때문에 teraterm 같은 터미널로 스크립트를 만들어서 돌려서
수천번 수만번 동일한 테스트를 할수도 있고..
특정 에러가 발생하면 멈추게 만들수도 있죠.

하지만 GUI가 있는 프로그램이거나 핸드폰 프로그램일 경우 텍스트 기반으로 테스트를 하기가 쉽지 않죠.
그래서 테스터 들이 엄청난 노가다를 하게됩니다.

만약 lisp에서 사용하는 기능을 인터프리터 방식인 java 나 c#에서도 된다면 정말 좋을거라고 생각됩니다.

winner의 이미지

Java 쪽은 모르겠습니다만 MS 계열에서는 그런 기술이 계속 발전하고 있습니다.
그쪽에서는 Coded Test라고 하더군요.
Test Scenario를 text로 입력하는 방식 말고도,
GUI에서 동작을 text code로 만드는 기술 역시 많이 발전시켰더군요.

Java는 JUnit을 넘어서면 왠지 XML이 등장할 것 같은데, 제 편견일까요?
GUI쪽 기술의 동향은 크게 들은 바 없지만 GUI layer를 가능한 얇게 만든다는게
자동화된 test를 선호하는 programmer들의 방식인 것 같습니다.

하지만 TDDBE를 읽어보면 Kent Beck은 자신은 1pixel 단위로 test 할 수 있다고 말합니다.
연구해보시면 괜찮은 결과가 나올 것 같기도 하고, 이미 만들어진게 여럿 있을지도 모르겠네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.