• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. Getting terminal data and printing it in CIW

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 143
  • Views 7322
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Getting terminal data and printing it in CIW

Tejaskill
Tejaskill over 2 years ago

Hi all,

I am looking for a code which can read terminal data and print it in CIW.

Example: If I call a child process through sh("./testrun.sh")
It will print some data in terminal but I need that data should be printed in CIW.

Is there any way to achieve this.

Thanks,
Teja.

  • Cancel
Parents
  • ebecheto
    ebecheto over 2 years ago

    Hi,

    Here is a perfectible example to do so :

    ;; copyleft ebecheto
    defun( shout (command @optional (rmNL nil) (verb t) )
    (let (ipcId ret) ;// not to use with complex shell command , no time stamp specified
    ipcId=ipcBeginProcess(command)
    ipcWaitForProcess(ipcId)
    ret=ipcReadProcess(ipcId 30) ;=>"now you see it..."
    when(verb printf("SHELL>%s" ret))
    when(rmNL rexCompile("\n") ret=rexReplace( ret "" 1));<== bad idea if multiline answer...
    ret
    ))
    printf("shout(\"hostname\")\n")
    printf("ret=shout(\"ls *.log\")\n")
    printf("ret=shout(\"env\")\n")
    printf("ret=shout(\"echo $SHELL\")\n")
    printf("ret=shout(\"spectre -help bsim3v3\")\n")
    printf("ret=shout(\"cds_root virtuoso\")\n")
    ;printf("ret=shout(\"echo `date +'_%Hh%M_%F'`\")\n")
    printf("ret=shout(\"echo `date +'%%F_%%Hh%%M_'`\")\n")

    ;printf("ret=shout(\"echo `date +F`TATA\")\n")

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • ebecheto
    ebecheto over 2 years ago

    Hi,

    Here is a perfectible example to do so :

    ;; copyleft ebecheto
    defun( shout (command @optional (rmNL nil) (verb t) )
    (let (ipcId ret) ;// not to use with complex shell command , no time stamp specified
    ipcId=ipcBeginProcess(command)
    ipcWaitForProcess(ipcId)
    ret=ipcReadProcess(ipcId 30) ;=>"now you see it..."
    when(verb printf("SHELL>%s" ret))
    when(rmNL rexCompile("\n") ret=rexReplace( ret "" 1));<== bad idea if multiline answer...
    ret
    ))
    printf("shout(\"hostname\")\n")
    printf("ret=shout(\"ls *.log\")\n")
    printf("ret=shout(\"env\")\n")
    printf("ret=shout(\"echo $SHELL\")\n")
    printf("ret=shout(\"spectre -help bsim3v3\")\n")
    printf("ret=shout(\"cds_root virtuoso\")\n")
    ;printf("ret=shout(\"echo `date +'_%Hh%M_%F'`\")\n")
    printf("ret=shout(\"echo `date +'%%F_%%Hh%%M_'`\")\n")

    ;printf("ret=shout(\"echo `date +F`TATA\")\n")

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
  • mschw
    mschw over 2 years ago in reply to ebecheto

    I suppose that you can adapt the solution from this article very easily that it satisfies your needs.

    Regards,

    Matthias

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Tejaskill
    Tejaskill over 2 years ago in reply to ebecheto

    Hi,

    Thanks for the reply but ipcReadProcess is only giving me 1 line output.

    I tried increasing the time limit but it still gives me less no of lines output

    My testrun.sh file may give 1000 lines output

    So I need a function which can print all that lines

    Teja.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • AurelBuche
    AurelBuche over 2 years ago in reply to Tejaskill

    Hi,

    A simple solution consists in piping your shell command to a file, then you just have to read and delete the file in SKILL

    Otherwise using ipcBeginProcess, the following SKILL++ snippet should do the job nicely:

    (inScheme
    (defun shell_output (command)
      "Run COMMAND then return stdout, stderr and exit status it generated"
      (let ((stdout (outstring))
            (stderr (outstring))
            exit_status)
        (unwindProtect
          (progn
            ;; Run shell command and wait for it to finish
            (ipcWait
              (ipcBeginProcess command ""
                ;; Save stdout, stderr and exit status
                (lambda (_pid data) (fprintf stdout "%s" data))
                (lambda (_pid data) (fprintf stderr "%s" data))
                (lambda (_pid n   ) (setq exit_status n))
                ))
            ;; Return stdout, stderr and exit status
            (list (getOutstring stdout) (getOutstring stderr) exit_status)
            )
          ;; Properly close outstrings whatever happened before
          (progn (close stdout) (close stderr))
          )))
    );inScheme
    


    Note that if you want stdout and stderr in one string as they would have been printed to the terminal, you can remove stderr definition in the let and replace stderr by stdout in the second lambda

    If you just want to print the output to the CIW and not get it in a string, you can also write a much simpler code

    (defun shell_print (command)
      "Run COMMAND while printing its stdout and stderr to CIW. Always return t"
      ;; Run shell command and wait for it to finish
      (ipcWait
        (ipcBeginProcess command ""
          ;; Print stdout and stderr to CIW
          (lambda (_pid data) (printf "%s" data))
          (lambda (_pid data) (printf "%s" data))
          )))
    

    Cheers,

    Aurel

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Tejaskill
    Tejaskill over 2 years ago in reply to AurelBuche

    This is the code I was looking for

    Thanks for your help

    Teja.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information