Get system command output: Difference between revisions

Added XPL0 example.
m (Fix dead documentation urls)
(Added XPL0 example.)
 
(13 intermediate revisions by 10 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 123:
</pre>
 
=={{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.
<syntaxhighlight lang="qbasic"> 100 HIMEM: 24576
110 LET A = 24576
120 LET P = 768
130 DEF FN P(A) = PEEK (A) + PEEK (A + 1) * 256
140 DEF FN H(A) = INT (A / 256)
150 DEF FN L(A) = A - FN H(A) * 256
160 POKE P + 00,073: REM EOR
170 POKE P + 01,128: REM #$80
180 POKE P + 02,141: REM STA
190 POKE P + 03, FN L(A)
200 POKE P + 04, FN H(A)
210 POKE P + 05,073: REM EOR
220 POKE P + 06,128: REM #$80
230 POKE P + 07,238: REM INC
240 POKE P + 08, FN L(P + 3)
250 POKE P + 09, FN H(P + 3)
260 POKE P + 10,208: REM BNE
270 POKE P + 11,3
280 POKE P + 12,238: REM INC
290 POKE P + 13, FN L(P + 4)
300 POKE P + 14, FN H(P + 4)
310 POKE P + 15,096: REM RTS
320 POKE 54, FN L(P)
330 POKE 55, FN H(P)
340 CALL 1002
350 PRINT CHR$ (4)"CATALOG"
360 PRINT CHR$ (4)"PR#0"
370 LET C = - 1
380 LET I = 0
390 LET S = 0
400 LET E = FN P(P + 3)
410 DIM S$(54)
420 LET S$(0) = ""
430 POKE 236, PEEK (131)
440 POKE 237, PEEK (132)
450 LET S = FN P(236)
460 FOR I = A TO E STEP 255
470 LET C = C + 1
480 POKE S + C * 3,255
490 IF E - I < 255 THEN POKE S + C * 3,E - I
500 POKE S + C * 3 + 1, FN L(I)
510 POKE S + C * 3 + 2, FN H(I)
520 PRINT S$(C);
530 NEXT </syntaxhighlight>
=={{header|Arturo}}==
 
<langsyntaxhighlight lang="rebol">print split.lines execute "ls"</langsyntaxhighlight>
 
{{out}}
Line 132 ⟶ 178:
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
BEGIN {
 
Line 170 ⟶ 216:
close(command)
return ship
}</langsyntaxhighlight>
 
=={{header|BaConBASIC}}==
==={{header|BaCon}}===
<lang freebasic>' Get system command
<syntaxhighlight lang="freebasic">' Get system command
result$ = EXEC$("fortune")
PRINT CHOP$(result$)
PRINT "First word: " & TOKEN$(result$, 1)</langsyntaxhighlight>
 
{{out}}
Line 186 ⟶ 233:
 
=={{header|Batch File}}==
<langsyntaxhighlight lang="dos">
@echo off
setlocal enabledelayedexpansion
Line 212 ⟶ 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 243 ⟶ 290:
 
=={{header|C}}==
<syntaxhighlight lang="c">
<lang C>
#include <stdio.h>
#include <stdlib.h>
Line 280 ⟶ 327:
return 0;
}
</syntaxhighlight>
</lang>
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">using System;
 
namespace GetSystemCommandOutput {
Line 302 ⟶ 349:
}
}
}</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <fstream>
#include <iostream>
 
Line 322 ⟶ 369:
int main() {
std::cout << execute("whoami") << '\n';
}</langsyntaxhighlight>
 
===Boost alternative===
{{libheader|Boost}}
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <string>
#include <vector>
Line 359 ⟶ 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 371 ⟶ 418:
=={{header|Common Lisp}}==
{{libheader|trivial-shell}}
<langsyntaxhighlight lang="lisp">(trivial-shell:shell-command "uname -imp")</langsyntaxhighlight>
 
{{out}}
Line 383 ⟶ 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 404 ⟶ 451:
writeln("Failed to execute command, status=", cmd.status);
}
}</langsyntaxhighlight>
 
{{out}}
Line 410 ⟶ 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 417 ⟶ 464:
printfn "%s" ((n.StandardOutput).ReadToEnd())
n.Close()
</syntaxhighlight>
</lang>
{{out}}
<pre style="height:64ex;overflow:scroll">
Line 583 ⟶ 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 592 ⟶ 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 601 ⟶ 648:
buffer swap type \ output is the same like above
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 612 ⟶ 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 627 ⟶ 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.
<syntaxhighlight 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
TaskSetExecutableURL( task, fn URLFileURLWithPath( @"/bin/sh" ) )
CFArrayRef arguments = fn ArrayWithObjects( @"-c", cmdStr, NULL )
TaskSetArguments( task, arguments )
PipeRef p = fn PipeInit
TaskSetStandardOutput( task, p )
FileHandleRef fh = fn PipeFileHandleForReading( p )
NotificationCenterAddObserver( @fn ObserverOne, NSFileHandleDataAvailableNotification, (FileHandleRef)fh )
fn TaskLaunch( task, NULL )
FileHandleWaitForDataInBackgroundAndNotify( fh )
end fn
 
fn RunCommand( @"man mdls | col -b" )
 
HandleEvents
</syntaxhighlight>
 
{{out}}
<pre>
 
MDLS(1) BSD General Commands Manual MDLS(1)
 
NAME
mdls -- lists the metadata attributes for the specified file
 
SYNOPSIS
mdls [-name attributeName] [-raw [-nullMarker markerString]] file ...
 
DESCRIPTION
The mdls command prints the values of all the metadata attributes associ-
ated with the files provided as an argument.
 
The following options are available:
 
-name Print only the matching metadata attribute value. Can be
used multiple times.
 
-raw Print raw attribute data in the order that was requested.
Fields will be separated with a ASCII NUL character, suit-
able for piping to xargs(1) -0.
 
-nullMarker Sets a marker string to be used when a requested attribute
is null. Only used in -raw mode. Default is "(null)".
 
SEE ALSO
mdfind(1), mdutil(1) xargs(1)
 
Mac OS X June 3, 2004 Mac OS X
</pre>
 
=={{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 637 ⟶ 754:
Print sStore
 
End</langsyntaxhighlight>
 
Output:
Line 658 ⟶ 775:
 
=={{header|Genie}}==
<langsyntaxhighlight lang="genie">[indent=4]
/*
Get system command output, in Genie
Line 676 ⟶ 793:
print standard_output
except e : SpawnError
stderr.printf("%s\n", e.message)</langsyntaxhighlight>
 
{{out}}
Line 687 ⟶ 804:
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import (
Line 701 ⟶ 818:
}
fmt.Print(string(output))
}</langsyntaxhighlight>
 
=={{header|Haskell}}==
Line 707 ⟶ 824:
{{libheader|process}}
 
<langsyntaxhighlight lang="haskell">#!/usr/bin/env stack
-- stack --resolver lts-8.15 --install-ghc runghc --package process
 
Line 718 ⟶ 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 743 ⟶ 860:
 
close(p)
end</langsyntaxhighlight>
 
{{out}}
Line 751 ⟶ 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 761 ⟶ 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 anon 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. AnywaysWhen that becomes an issue, I usually prefer to do that kindsubshell ofresult processingcapture before J starts, just to be safe.
 
(I've seen other problems on windows and osx - I am only singling out linux here because it is the most convenient for command line and system command use.)
Line 773 ⟶ 890:
=={{header|Java}}==
{{works with|Java|7}}
<langsyntaxhighlight lang="java">import java.io.*;
import java.util.*;
 
Line 791 ⟶ 908:
}
}
}</langsyntaxhighlight>
 
Output:
Line 814 ⟶ 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 849 ⟶ 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 865 ⟶ 982:
println(sc.nextLine())
sc.close()
}</langsyntaxhighlight>
 
{{out}}
Line 875 ⟶ 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 936 ⟶ 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 948 ⟶ 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 958 ⟶ 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 971 ⟶ 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,036 ⟶ 1,153:
/* Get the exit status */
var ps = process_exit(proc);
sys_exit(ps);</langsyntaxhighlight>
 
{{out}}
Line 1,054 ⟶ 1,171:
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">import osproc
 
# Output string and error code
Line 1,067 ⟶ 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,078 ⟶ 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,108 ⟶ 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,117 ⟶ 1,234:
parse pull text
Say text
End </langsyntaxhighlight>
{{out}}
<pre>Output of "dir tu*.rex /od"
Line 1,131 ⟶ 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,140 ⟶ 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,169 ⟶ 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,180 ⟶ 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,188 ⟶ 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,210 ⟶ 1,327:
Volume Serial Number is 8C33-162D
</pre>
 
=={{header|PureBasic}}==
<syntaxhighlight lang="purebasic">If OpenConsole("ls")
rp=RunProgram("ls", "-l", "",#PB_Program_Open|#PB_Program_Read)
While ProgramRunning(rp)
If AvailableProgramOutput(rp)
r$+ReadProgramString(rp)+#LF$
EndIf
Wend
CloseProgram(rp)
PrintN(r$)
Input()
EndIf
</syntaxhighlight>
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">>>> import subprocess
>>> returned_text = subprocess.check_output("dir", shell=True, universal_newlines=True)
>>> type(returned_text)
Line 1,240 ⟶ 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,266 ⟶ 1,397:
 
=={{header|R}}==
<langsyntaxhighlight lang="rsplus">
system("wc -l /etc/passwd /etc/group", intern = TRUE)
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,277 ⟶ 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,308 ⟶ 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,328 ⟶ 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,347 ⟶ 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,357 ⟶ 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,379 ⟶ 1,510:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
system("dir C:\Ring\doc")
</syntaxhighlight>
</lang>
Output:
<pre>
Line 1,399 ⟶ 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,418 ⟶ 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,456 ⟶ 1,587:
return local out "`s'"
}
end</langsyntaxhighlight>
 
'''Example:'''
 
<langsyntaxhighlight lang="stata">. shellout dir /b *.dta
. display r(out)
auto.dta
Line 1,467 ⟶ 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,485 ⟶ 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,514 ⟶ 1,645:
)
end;
</syntaxhighlight>
</lang>
call
useOS "This is my text, zip it now" ;
Line 1,523 ⟶ 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,576 ⟶ 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,599 ⟶ 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,622 ⟶ 1,753:
End Sub
 
End Module</langsyntaxhighlight>
 
=={{header|Wren}}==
Line 1,629 ⟶ 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,669 ⟶ 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,676 ⟶ 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}}==
<syntaxhighlight lang="yabasic">// Rosetta Code problem: https://www.rosettacode.org/wiki/Get_system_command_output
// by Jjuanhdez, 06/2022
 
if peek$("os") = "unix" then
c$ = "ls *"
else //"windows"
c$ = "dir *.*"
fi
 
open("dir_output.txt") for writing as #1
print #1 system$(c$)
close #1</syntaxhighlight>
 
=={{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