# Standard input and output can be handled through streams.
module exec
-import stream
+import file
# Simple sub-process
class Process
var arguments: nullable Array[String]
# Launch a command with some arguments
- init(command: String, arguments: String...)
- do
+ init(command: String, arguments: String...) is old_style_init do
self.command = command
self.arguments = arguments
execute
class IProcess
super Process
super IStream
- var stream_in: FDIStream is noinit
+
+ # File Descriptor used for the input.
+ var stream_in: IFStream is noinit
redef fun close do stream_in.close
redef fun execute
do
super
- stream_in = new FDIStream(data.out_fd)
+ stream_in = new IFStream.from_fd(data.out_fd)
end
end
class OProcess
super Process
super OStream
+
+ # File Descriptor used for the output.
var stream_out: OStream is noinit
redef fun close do stream_out.close
redef fun execute
do
super
- stream_out = new FDOStream(data.in_fd)
+ stream_out = new OFStream.from_fd(data.in_fd)
end
end
end
redef class NativeString
+ # Execute self as a shell command.
+ #
+ # See the posix function system(3).
fun system: Int is extern "string_NativeString_NativeString_system_0"
end