Get system command output: Difference between revisions

Added XPL0 example.
(Added XPL0 example.)
 
(6 intermediate revisions by 5 users not shown)
Line 10:
{{works with|Commodore 64}}
Uses the system call <code>$FFED</code> which returns the screen dimensions (measured in 8x8 pixel squares).
<langsyntaxhighlight lang="6502asm">JSR $FFED
;returns screen width in X and screen height in Y
dex ;subtract 1. This is more useful for comparisons.
dey ;subtract 1. This is more useful for comparisons.
stx $20 ;store in zero page ram
sty $21 ;store in zero page ram</langsyntaxhighlight>
 
 
Line 21:
{{works with|NEOGEO MVS}}
This program uses the system command that retrieves the current time, which is used to seed a random number generator. All labels are either routines, macros, or memory locations as appropriate. Code is called during the game's vBlank routine.
<langsyntaxhighlight lang="68000devpac">doRNG:
;run this during vblank for best results.
JSR SYS_READ_CALENDAR
Line 41:
SwapRNGifEven:
MOVE.L D0,RNGout_32
rts</langsyntaxhighlight>
 
The following macro is used in the above routine:
<langsyntaxhighlight lang="68000devpac"> macro CloneByte 1
;\1 must be a data register.
;copies the lowest byte to all 4 bytes.
Line 53:
SWAP \1
popWord \1
endm</langsyntaxhighlight>
 
=={{header|Ada}}==
{{works with|GNAT}}
<langsyntaxhighlight Adalang="ada">with Ada.Text_IO; use Ada.Text_IO;
with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
with GNAT.Expect; use GNAT.Expect;
Line 95:
end loop;
 
end System_Command;</langsyntaxhighlight>
 
=={{header|Aime}}==
<langsyntaxhighlight lang="aime">o_("-- ", sshell().plan("expr", "8", "*", "9").link.b_dump('\n'), " --\n");</langsyntaxhighlight>
{{Out}}
<pre>-- 72 --</pre>
 
=={{header|Amazing Hopper}}==
<syntaxhighlight lang="amazing hopper">
<lang Amazing Hopper>
/* JAMBO language - a flavour of Hopper */
#include <jambo.h>
Line 110:
Set( sys ) Prnl
End
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 117:
#include <jambo.h>
Main
sys = `cat jm/sus1sys1.jambo`
Set( sys ) Prnl
End
Line 125:
=={{header|Applesoft BASIC}}==
A small machine language program is POKEd into memory starting at address P. The address of the program P is POKEd into the 54 and 55 zero page locations. CALL 1002 connects output to the program. The system command CATALOG is run, and all output is written to memory starting at address A. PR#0 reconnects output back to the screen. Variables are carefully declared before the first string in the array S$(0) is assigned. The most recent address of S$(0) is used to assign pointers and lengths to the array of strings. S$(C) is the last string in the array.
<langsyntaxhighlight lang="qbasic"> 100 HIMEM: 24576
110 LET A = 24576
120 LET P = 768
Line 168:
510 POKE S + C * 3 + 2, FN H(I)
520 PRINT S$(C);
530 NEXT </langsyntaxhighlight>
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">print split.lines execute "ls"</langsyntaxhighlight>
 
{{out}}
Line 178:
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
BEGIN {
 
Line 216:
close(command)
return ship
}</langsyntaxhighlight>
 
=={{header|BaConBASIC}}==
==={{header|BaCon}}===
<langsyntaxhighlight lang="freebasic">' Get system command
result$ = EXEC$("fortune")
PRINT CHOP$(result$)
PRINT "First word: " & TOKEN$(result$, 1)</langsyntaxhighlight>
 
{{out}}
Line 232 ⟶ 233:
 
=={{header|Batch File}}==
<langsyntaxhighlight lang="dos">
@echo off
setlocal enabledelayedexpansion
Line 258 ⟶ 259:
 
pause>nul
</syntaxhighlight>
</lang>
 
=={{header|Bracmat}}==
<langsyntaxhighlight Bracmatlang="bracmat">(system=
.sys$(str$(!arg " > temp"))&get$(temp,STR)
);</langsyntaxhighlight>
Example:
<syntaxhighlight lang Bracmat="bracmat">system$ls</langsyntaxhighlight>
'''Output'''
<pre>Changelog
Line 289 ⟶ 290:
 
=={{header|C}}==
<syntaxhighlight lang="c">
<lang C>
#include <stdio.h>
#include <stdlib.h>
Line 326 ⟶ 327:
return 0;
}
</syntaxhighlight>
</lang>
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">using System;
 
namespace GetSystemCommandOutput {
Line 348 ⟶ 349:
}
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <fstream>
#include <iostream>
 
Line 368 ⟶ 369:
int main() {
std::cout << execute("whoami") << '\n';
}</langsyntaxhighlight>
 
===Boost alternative===
{{libheader|Boost}}
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <string>
#include <vector>
Line 405 ⟶ 406:
}
return EXIT_SUCCESS;
}</langsyntaxhighlight>
 
=={{header|Clojure}}==
sh returns a map of exit code, stdout, and stderr from the command:
<langsyntaxhighlight lang="clojure">(use '[clojure.java.shell :only [sh]])
(sh "echo" "Hello")</langsyntaxhighlight>
 
{{out}}
Line 417 ⟶ 418:
=={{header|Common Lisp}}==
{{libheader|trivial-shell}}
<langsyntaxhighlight lang="lisp">(trivial-shell:shell-command "uname -imp")</langsyntaxhighlight>
 
{{out}}
Line 429 ⟶ 430:
the :output keyword. We can then read from the stream:
 
<langsyntaxhighlight lang="lisp">(defparameter *my-proc*
(sb-ext:run-program "mplayer" (list "/path/to/groovy/tune")
:search t :output :stream :wait nil))
(read-line (sb-ext:process-output *my-proc*) nil)</langsyntaxhighlight>
 
{{libheader|uiop}}
A bit more general, using [https://github.com/fare/asdf uiop] and grabbing output as a string:
<langsyntaxhighlight lang="lisp">(uiop:run-program '("ls" "-l" "-a") :output :string)</langsyntaxhighlight>
 
=={{header|D}}==
<langsyntaxhighlight Dlang="d">import std.process;
import std.stdio;
 
Line 450 ⟶ 451:
writeln("Failed to execute command, status=", cmd.status);
}
}</langsyntaxhighlight>
 
{{out}}
Line 456 ⟶ 457:
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">
// System Command Output. Nigel Galloway: October 6th., 2020
let n=new System.Diagnostics.Process(StartInfo=System.Diagnostics.ProcessStartInfo(RedirectStandardOutput=true,RedirectStandardError=true,UseShellExecute=false,
Line 463 ⟶ 464:
printfn "%s" ((n.StandardOutput).ReadToEnd())
n.Close()
</syntaxhighlight>
</lang>
{{out}}
<pre style="height:64ex;overflow:scroll">
Line 629 ⟶ 630:
=={{header|Factor}}==
<code>with-process-reader</code> is a combinator that encapsulates reading the output of a system command. It also throws an error along with the appropriate exit status in the event of failure.
<langsyntaxhighlight lang="factor">USING: io.encodings.utf8 io.launcher ;
"echo hello" utf8 [ contents ] with-process-reader .</langsyntaxhighlight>
{{out}}
<pre>
Line 638 ⟶ 639:
=={{header|Forth}}==
Using Gforth 0.7.9
<langsyntaxhighlight lang="forth">s" ps " system \ Output only
\ read via pipe into buffer
create buffer 266 allot
Line 647 ⟶ 648:
buffer swap type \ output is the same like above
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 658 ⟶ 659:
 
=={{header|FreeBASIC}}==
<langsyntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
'capture the output of the 'dir' command and print it to a text file
Line 673 ⟶ 674:
Close #2
Close #1
End</langsyntaxhighlight>
 
 
=={{header|FutureBasic}}==
Simple system commands can be run in FB's open "UNIX" function. However, more common are functions such as this example which uses a notification observer to watch as data is downloaded in the background. The command in this example returns the mdls man page.
<langsyntaxhighlight lang="futurebasic">
include "NSLog.incl"
 
local fn ObserverOne( ref as NotificationRef )
FileHandleRef fh = fn NotificationObject( ref )
CFDataRef dta = fn FileHandleAvailableData( fh )
 
if ( fn DataLength( dta ) > 0 )
CFStringRef string = fn StringWithData( dta, NSUTF8StringEncoding )
NSLog( @"%@", string )
FileHandleWaitForDataInBackgroundAndNotify( fh )
else
NotificationCenterRemoveObserver( @fn ObserverOne, NSFileHandleDataAvailableNotification )
end if
end fn
 
local fn RunCommand( cmdStr as CFStringRef )
TaskRef task = fn TaskInit
'~'1
TaskSetExecutableURL( task, fn URLFileURLWithPath( @"/bin/sh" ) )
TaskRef task = fn TaskInit
CFArrayRef arguments = fn ArrayWithObjects( @"-c", cmdStr, NULL )
TaskSetExecutableURL( task, fn URLFileURLWithPath( @"/bin/sh" ) )
TaskSetArguments( task, arguments )
CFArrayRef arguments = fn ArrayWithObjects( @"-c", cmdStr, NULL )
PipeRef p = fn PipeInit
TaskSetArguments( task, arguments )
TaskSetStandardOutput( task, p )
PipeRef p = fn PipeInit
FileHandleRef fh = fn PipeFileHandleForReading( p )
TaskSetStandardOutput( task, p )
NotificationCenterAddObserver( @fn ObserverOne, NSFileHandleDataAvailableNotification, (FileHandleRef)fh )
FileHandleRef fh = fn PipeFileHandleForReading( p )
fn TaskLaunch( task, NULL )
NotificationCenterAddObserver( @fn ObserverOne, NSFileHandleDataAvailableNotification, (FileHandleRef)fh )
FileHandleWaitForDataInBackgroundAndNotify( fh )
fn TaskLaunch( task, NULL )
FileHandleWaitForDataInBackgroundAndNotify( fh )
end fn
 
Line 711:
 
HandleEvents
</syntaxhighlight>
</lang>
 
{{output}}
{{out}}
<pre>
 
Line 747 ⟶ 748:
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=d595094b5bc9c3abb17808b2b00938f9 Click this link to run this code]'''
<langsyntaxhighlight lang="gambas">Public Sub Main()
Dim sStore As String
 
Line 753 ⟶ 754:
Print sStore
 
End</langsyntaxhighlight>
 
Output:
Line 774 ⟶ 775:
 
=={{header|Genie}}==
<langsyntaxhighlight lang="genie">[indent=4]
/*
Get system command output, in Genie
Line 792 ⟶ 793:
print standard_output
except e : SpawnError
stderr.printf("%s\n", e.message)</langsyntaxhighlight>
 
{{out}}
Line 803 ⟶ 804:
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 817 ⟶ 818:
}
fmt.Print(string(output))
}</langsyntaxhighlight>
 
=={{header|Haskell}}==
Line 823 ⟶ 824:
{{libheader|process}}
 
<langsyntaxhighlight lang="haskell">#!/usr/bin/env stack
-- stack --resolver lts-8.15 --install-ghc runghc --package process
 
Line 834 ⟶ 835:
-- print each line in reverse
mapM_ (putStrLn . reverse) results</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight lang="unicon">#
# piped.icn, Get system command output
#
Line 859 ⟶ 860:
 
close(p)
end</langsyntaxhighlight>
 
{{out}}
Line 867 ⟶ 868:
 
=={{header|IS-BASIC}}==
<langsyntaxhighlight ISlang="is-BASICbasic">100 OPEN #1:"dirinfo.txt" ACCESS OUTPUT
110 SET DEFAULT CHANNEL 1
120 EXT "dir"
130 CLOSE #1
140 SET DEFAULT CHANNEL 0</langsyntaxhighlight>
 
=={{header|J}}==
Line 877 ⟶ 878:
We will box the result of uname -imp on a linux system, to show that we have captured the command output in J:
 
<langsyntaxhighlight Jlang="j"> require 'task'
<shell 'uname -imp'
┌─────────────────────┐
│x86_64 x86_64 x86_64 │
└─────────────────────┘</langsyntaxhighlight>
 
Caution: I have sometimes seen some versions of linux refuse to execute subshells after a few hundred thousand shell commands (the exec system call fails). I've not found any satisfying documentation on why this happens, but I strongly suspect kernel memory fragmentation (the examples where this happened were also using a lot of memory to accumulate results and it happened much more frequently on machines with little memory than on machines with more memory). Exiting J and starting a new process has cleared it up when it has happened. When that becomes an issue, I usually prefer to do subshell result capture before J starts, just to be safe.
Line 889 ⟶ 890:
=={{header|Java}}==
{{works with|Java|7}}
<langsyntaxhighlight lang="java">import java.io.*;
import java.util.*;
 
Line 907 ⟶ 908:
}
}
}</langsyntaxhighlight>
 
Output:
Line 930 ⟶ 931:
 
=={{header|Jsish}}==
<langsyntaxhighlight lang="javascript">var commandOutput = exec('ls -gocart', { retAll:true });
puts(commandOutput.data);</langsyntaxhighlight>
 
The jsish ''exec'' command (like many jsish commands) accepts an optional option object, details available with interactive help:
Line 965 ⟶ 966:
 
In a single string:
<langsyntaxhighlight lang="julia">ls = readstring(`ls`)</langsyntaxhighlight>
 
In multiple lines:
<langsyntaxhighlight lang="julia">ll = readlines(`ls -l`)</langsyntaxhighlight>
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.0.6
 
import java.util.Scanner
Line 981 ⟶ 982:
println(sc.nextLine())
sc.close()
}</langsyntaxhighlight>
 
{{out}}
Line 991 ⟶ 992:
The library from lil.c does not include a system command, but main.c for the lil shell does.
 
<langsyntaxhighlight lang="tcl">set rc [system ls -go]</langsyntaxhighlight>
 
{{out}}
Line 1,052 ⟶ 1,053:
=={{header|Lingo}}==
{{libheader|Shell Xtra}}
<langsyntaxhighlight lang="lingo">sx = xtra("Shell").new()
put sx.shell_cmd("cd C:\dev\lsw\lib & dir")
 
Line 1,064 ⟶ 1,065:
23.06.2016 18:22 <DIR> base64
23.06.2016 18:21 <DIR> base9
<snip>"</langsyntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight Lualang="lua">local output = io.popen("echo Hurrah!")
print(output:read("*all"))</langsyntaxhighlight>
{{out}}
<pre>Hurrah!</pre>
Line 1,074 ⟶ 1,075:
=={{header|M2000 Interpreter}}==
Make a UTF-16LE txt.out from dir using a new cmd with /U
<syntaxhighlight lang="m2000 interpreter">
<lang M2000 Interpreter>
Module CheckIt {
Dos "cd "+quote$(Dir$) +" & cmd /U /C dir *.txt >txt.out";
Line 1,087 ⟶ 1,088:
}
Checkit
</syntaxhighlight>
</lang>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<langsyntaxhighlight Mathematicalang="mathematica">RunProcess["date"]</langsyntaxhighlight>
{{out}}
<pre><|"ExitCode" -> 0, "StandardOutput" -> "Wed Oct 4 14:01:01 BST 2017", "StandardError" -> ""|></pre>
 
=={{header|Neko}}==
<langsyntaxhighlight ActionScriptlang="actionscript">/* Get system command output, neko */
var process_run = $loader.loadprim("std@process_run", 2);
var process_stdout_read = $loader.loadprim("std@process_stdout_read", 4);
Line 1,152 ⟶ 1,153:
/* Get the exit status */
var ps = process_exit(proc);
sys_exit(ps);</langsyntaxhighlight>
 
{{out}}
Line 1,170 ⟶ 1,171:
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">import osproc
 
# Output string and error code
Line 1,183 ⟶ 1,184:
 
echo "Output: " & lsStr
</syntaxhighlight>
</lang>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">class Test {
function : Main(args : String[]) ~ Nil {
output := System.Runtime->CommandOutput("ls -l");
Line 1,194 ⟶ 1,195:
}
}
</syntaxhighlight>
</lang>
 
=={{header|ooRexx}}==
===version 1===
<langsyntaxhighlight ooRexxlang="oorexx">/* Execute a system command and retrieve its output into a stem. */
trace normal
 
Line 1,224 ⟶ 1,225:
 
/* Exit with the system command's return code. */
exit ls_rc</langsyntaxhighlight>
===version 2===
<langsyntaxhighlight lang="oorexx">cmd='dir tu*.rex /od'
cmd '| rxqueue'
Say 'Output of "'cmd'"'
Line 1,233 ⟶ 1,234:
parse pull text
Say text
End </langsyntaxhighlight>
{{out}}
<pre>Output of "dir tu*.rex /od"
Line 1,247 ⟶ 1,248:
0 Verzeichnis(se), 3.357.933.568 Bytes frei </pre>
===version 3===
<langsyntaxhighlight lang="oorexx">dir='dir.dir'
cmd='dir t*.rex /od'
cmd '>'dir
Line 1,256 ⟶ 1,257:
Say linein(dir)
End
Call lineout oid</langsyntaxhighlight>
{{out}}
<pre>identical to version 2's output</pre>
 
=={{header|PARI/GP}}==
<langsyntaxhighlight lang="parigp">externstr("time/t")</langsyntaxhighlight>
 
=={{header|Perl}}==
Uses the qx{} construct (which is a synonym for backticks, e.g. `command`) to execute a given command and redirect its output.
A (somewhat contrived*) example, capturing only STDOUT:
<langsyntaxhighlight lang="perl">my @directories = grep { chomp; -d } `ls`;
for (@directories) {
chomp;
...; # Operate on directories
}</langsyntaxhighlight>
* Perl's opendir function should be used in preference to parsing ls--it's safer, faster, and more portable.
 
Perl also honors shell redirections:
<langsyntaxhighlight lang="perl">my $command = shift or die "No command supplied\n";
my @output_and_errors = qx/$command 2>&1/ or die "Couldn't execute command\n";</langsyntaxhighlight>
qx// is implemented internally with the built-in function readpipe, which can be invoked directly as readpipe EXPR (where EXPR is some command) and assigned to scalars or lists just like qx/command/ or `command`.
 
The open command can also be used to open pipes using the -| mode:
<langsyntaxhighlight lang="perl">use autodie;
my $enc = ':encoding(UTF-8)';
my $child_pid = open(my $pipe, "-|$enc", 'ls');
Line 1,285 ⟶ 1,286:
# Print all files whose names are all lowercase
print if m/[^A-Z]+/;
}</langsyntaxhighlight>
 
=={{header|Phix}}==
<!--<langsyntaxhighlight Phixlang="phix">(notonline)-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- system_exec, file i/o</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">tmp</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"hostname.txt"</span><span style="color: #0000FF;">,</span>
Line 1,296 ⟶ 1,297:
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">delete_file</span><span style="color: #0000FF;">(</span><span style="color: #000000;">tmp</span><span style="color: #0000FF;">)</span>
<span style="color: #0000FF;">?</span><span style="color: #000000;">host</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre>
Line 1,304 ⟶ 1,305:
 
=={{header|Phixmonti}}==
<langsyntaxhighlight Phixmontilang="phixmonti">"hostname.txt" var hname
"hostname > " hname chain cmd
hname "r" fopen
dup fgets print fclose
"del " hname chain cmd</langsyntaxhighlight>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">: (in '(uname "-om") (line T))
-> "aarch64 Android"</langsyntaxhighlight>
 
=={{header|PowerShell}}==
Capture system disk label information as an array of strings:
<syntaxhighlight lang="powershell">
<lang PowerShell>
[string[]]$volume = cmd /c vol
 
$volume
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 1,328 ⟶ 1,329:
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">If OpenConsole("ls")
rp=RunProgram("ls", "-l", "",#PB_Program_Open|#PB_Program_Read)
While ProgramRunning(rp)
Line 1,339 ⟶ 1,340:
Input()
EndIf
</syntaxhighlight>
</lang>
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">>>> import subprocess
>>> returned_text = subprocess.check_output("dir", shell=True, universal_newlines=True)
>>> type(returned_text)
Line 1,370 ⟶ 1,371:
9 Dir(s) 46,326,947,840 bytes free
 
>>> # Ref: https://docs.python.org/3/library/subprocess.html</langsyntaxhighlight>
 
=={{header|Quackery}}==
Line 1,396 ⟶ 1,397:
 
=={{header|R}}==
<langsyntaxhighlight lang="rsplus">
system("wc -l /etc/passwd /etc/group", intern = TRUE)
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,407 ⟶ 1,408:
We use <code>#lang racket/base</code> to show which module system is in. It would be imported anyway if we use the larger <code>#lang racket</code>.
 
This demonstrates one function: <code>system</system></code>. It is the simplest of a family of commands in the <code>racket/system</code> collection.
 
See [http://docs.racket-lang.org/reference/subprocess.html?q=system#%28def._%28%28lib._racket%2Fsystem..rkt%29._system%29%29 documentation for <code>system</code> and friends].
 
<langsyntaxhighlight lang="racket">#lang racket/base
 
(require racket/system
Line 1,438 ⟶ 1,439:
(system "echo -n foo; echo bar 1>&2"))))
(values system-rv (get-output-string out-str-port) (get-output-string err-str-port)))
=> (values #t "foo" "bar\n"))</langsyntaxhighlight>
 
{{out}}
Line 1,458 ⟶ 1,459:
 
If you don't want to execute it in shell (and you probably don't), then use this:
<syntaxhighlight lang="raku" perl6line>say run($command, $arg1, $arg2, :out).out.slurp;</langsyntaxhighlight>
 
Unfortunately, it is very long to type, but that is the only way to pass your variables as arguments safely.
 
You might be tempted to start using shell when you have to pipe something, but even in that case there is no need to do so. See this code:
<syntaxhighlight lang="raku" perl6line>my $p1 = run 'echo', 'Hello, world', :out;
my $p2 = run 'cat', '-n', :in($p1.out), :out;
say $p2.out.slurp-rest;</langsyntaxhighlight>
See [https://docs.raku.org/type/Proc docs] for more info.
 
If you really want to run something in shell and you understand potential security problems, then you can use <code>qx//</code> (interpolates environment variables) or <code>qqx//</code> (interpolates normally). See [https://docs.raku.org/language/quoting the docs for more info].
 
<syntaxhighlight lang="raku" perl6line>say qx[dir]</langsyntaxhighlight>
{{out}}
<pre>Find_URI_in_text.p6 History_variables.p6 K-d_tree.pl
Line 1,477 ⟶ 1,478:
=={{header|REXX}}==
{{works with|Regina REXX}}
<langsyntaxhighlight lang="rexx">/*REXX program executes a system command and displays the results (from an array). */
parse arg xxxCmd /*obtain the (system) command from CL.*/
trace off /*suppress REXX error msgs for fails. */
Line 1,487 ⟶ 1,488:
say strip(@.#, 'T') /*display one line at a time──►terminal*/
end /*#*/ /* [↑] displays all the output. */
exit 0 /*stick a fork in it, we're all done. */</langsyntaxhighlight>
{{out|output|text=&nbsp; from the executed command &nbsp; (under Windows/XP): &nbsp; &nbsp; <tt> &nbsp; dir &nbsp; g:sub*.2*</tt>}}
<pre>
Line 1,509 ⟶ 1,510:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
system("dir C:\Ring\doc")
</syntaxhighlight>
</lang>
Output:
<pre>
Line 1,529 ⟶ 1,530:
=={{header|Ruby}}==
Many options, google exec or system or %x. Demonstrating backticks:
<langsyntaxhighlight lang="ruby">str = `ls`
arr = `ls`.lines</langsyntaxhighlight>
 
=={{header|Run BASIC}}==
<langsyntaxhighlight lang="runbasic">a$ = shell$("dir") ' Returns the directory info into a$
print a$ ' prints the directory
</syntaxhighlight>
</lang>
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">use std::process::Command;
use std::io::{Write, self};
 
Line 1,548 ⟶ 1,549:
 
io::stdout().write(&output.stdout);
}</langsyntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">import scala.io.Source
 
val command = "cmd /c echo Time at %DATE% %TIME%"
val p = Runtime.getRuntime.exec(command)
val sc = Source.fromInputStream(p.getInputStream)
println(sc.mkString)</langsyntaxhighlight>
 
=={{header|Sidef}}==
Using backticks:
<langsyntaxhighlight lang="ruby">var output = `ls` # `output` is a string
var lines = `ls`.lines # `lines` is an array</langsyntaxhighlight>
 
Using pipes:
<langsyntaxhighlight lang="ruby">var pipe = %p(ls) # same as: Pipe('ls')
var pipe_h = pipe.open_r # open the pipe for reading
var lines = [] # will store the lines of the output
pipe_h.each { |line| lines << line }</langsyntaxhighlight>
 
=={{header|Stata}}==
Redirect the output to a temporary file, then read its contents into a result macro r(out).
 
<langsyntaxhighlight lang="stata">program shellout, rclass
tempfile f
tempname m
Line 1,586 ⟶ 1,587:
return local out "`s'"
}
end</langsyntaxhighlight>
 
'''Example:'''
 
<langsyntaxhighlight lang="stata">. shellout dir /b *.dta
. display r(out)
auto.dta
Line 1,597 ⟶ 1,598:
. shellout python -V
. display r(out)
Python 3.6.2</langsyntaxhighlight>
 
=={{header|Swift}}==
<langsyntaxhighlight Swiftlang="swift">import Foundation
 
let process = Process()
Line 1,615 ⟶ 1,616:
let output = String.init(data: data, encoding: String.Encoding.utf8)
 
print(output!)</langsyntaxhighlight>
 
=={{header|Standard ML}}==
<langsyntaxhighlight Standardlang="standard MLml">val useOS = fn input =>
let
val text = String.translate (fn #"\"" => "\\\""|n=>str n ) input ;
Line 1,644 ⟶ 1,645:
)
end;
</syntaxhighlight>
</lang>
call
useOS "This is my text, zip it now" ;
Line 1,653 ⟶ 1,654:
=={{header|Tcl}}==
The <code>exec</code> makes this straight-forward for most commands.
<langsyntaxhighlight lang="tcl">set data [exec ls -l]
puts "read [string length $data] bytes and [llength [split $data \n]] lines"</langsyntaxhighlight>
There are a few exceptions, such as the <tt>DIR</tt> command on Windows, where they need to be run slightly differently due to being system shell builtins rather than executables. In that case, the <code>auto_execok</code> standard library command is used to look up how to run the command (strictly it can be used for any command — it will do path resolution, etc. — but is only necessary for system builtins).
<langsyntaxhighlight lang="tcl">set data [exec {*}[auto_execok DIR]]</langsyntaxhighlight>
By default, Tcl will use the system encoding (as reported by <code>encoding system</code>) to understand the output byte-stream as characters, and will auto-convert all the various types of newline terminators into <tt>U+00000A</tt> characters. Control over this is possible by launching the subprocess as a pipe, configuring the pipe, and then reading the pipe in its entirety.
<langsyntaxhighlight lang="tcl"># This syntax is pretty ugly, alas
set pipe [open |[list ls -l] "r"]
fconfigure $pipe -encoding iso8859-1 -translation lf
set data [read $pipe]
close $pipe</langsyntaxhighlight>
This is usually not necessary except when dealing with binary data output.
 
=={{header|Ursa}}==
This program reads the output of the ifconfig command into the string stream 'output', then writes it to the screen.
<langsyntaxhighlight lang="ursa">> decl iodevice iod
> decl string<> arg
> append "ifconfig" arg
Line 1,706 ⟶ 1,707:
media: autoselect
status: inactive
> </langsyntaxhighlight>
 
=={{header|VBScript}}==
This program implements a function that executes a DOS command and returns the output to the caller.
<langsyntaxhighlight lang="vb">For Each line In ExecCmd("ipconfig /all")
Wscript.Echo line
Next
Line 1,729 ⟶ 1,730:
'Return as a text array
ExecCmd = Split(Mid(res,2),vbLf)
End Function</langsyntaxhighlight>
 
=={{header|Visual Basic .NET}}==
{{trans|C#}}
<langsyntaxhighlight lang="vbnet">Module Module1
 
Sub Main()
Line 1,752 ⟶ 1,753:
End Sub
 
End Module</langsyntaxhighlight>
 
=={{header|Wren}}==
Line 1,759 ⟶ 1,760:
However, if Wren is embedded in (say) a suitable Go program, then we can ask the latter to do it for us.
 
<langsyntaxhighlight ecmascriptlang="wren">/* get_system_command_outputGet_system_command_output.wren */
class Command {
foreign static output(name, param) // the code for this is provided by Go
}
 
System.print(Command.output("ls", "-ls"))</langsyntaxhighlight>
 
which we embed in the following Go program and run it.
{{libheader|WrenGo}}
<langsyntaxhighlight lang="go">/* get_system_command_outputGet_system_command_output.go */
package main
 
Line 1,799 ⟶ 1,800:
func main() {
vm := wren.NewVM()
fileName := "get_system_command_outputGet_system_command_output.wren"
methodMap := wren.MethodMap{"static output(_,_)": getCommandOutput}
classMap := wren.ClassMap{"Command": wren.NewClass(nil, nil, methodMap)}
Line 1,806 ⟶ 1,807:
vm.InterpretFile(fileName)
vm.Free()
}</langsyntaxhighlight>
 
=={{header|XPL0}}==
Use a pipe on the command line to run this. For example: dir | syscmd
<syntaxhighlight lang "XPL0">int C;
repeat C:= ChIn(1);
if C>=^a & C<=^z then \lowercase letters to uppercase
C:= C & ~$20;
ChOut(0, C);
until C = $1A</syntaxhighlight>
 
=={{header|Yabasic}}==
<langsyntaxhighlight lang="yabasic">// Rosetta Code problem: https://www.rosettacode.org/wiki/Get_system_command_output
// by Jjuanhdez, 06/2022
 
Line 1,820 ⟶ 1,830:
open("dir_output.txt") for writing as #1
print #1 system$(c$)
close #1</langsyntaxhighlight>
 
=={{header|zkl}}==
From the REPL on Linux. Runs a command in the shell with stdout redirected to file, then slurps the file. A bit greasy since there isn't a way to find/generate a unique unused file name.
<langsyntaxhighlight lang="zkl">zkl: System.cmd("date >foo.txt")
0 // date return code
zkl: File("foo.txt").read().text
Wed Aug 20 00:28:55 PDT 2014</langsyntaxhighlight>
291

edits