############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Frank Celler. ## ## Copyright of GAP belongs to its developers, whose names are too numerous ## to list here. Please refer to the COPYRIGHT file for details. ## ## SPDX-License-Identifier: GPL-2.0-or-later ## ## This file contains the methods for process. ##
# check path and program if not IsDirectoryPath(dir) then
Error( "directory <dir> does not exist" ); fi; if not IsExecutableFile(prg) then
Error( "program <prg> does not exist" ); fi;
# execute the process
return ExecuteProcess( dir, prg, -1, -1, args ); end );
# check path and program if not IsDirectoryPath(dir) then
Error( "directory <dir> does not exist" ); fi; if not IsExecutableFile(prg) then
Error( "program <prg> does not exist" ); fi;
# execute the process
return ExecuteProcess( dir, prg, input![1], -1, args ); end );
# check path and program if not IsDirectoryPath(dir) then
Error( "directory <dir> does not exist" ); fi; if not IsExecutableFile(prg) then
Error( "program <prg> does not exist" ); fi;
# execute the process
return ExecuteProcess( dir, prg, -1, output![1], args ); end );
# check path and program if not IsDirectoryPath(dir) then
Error( "directory <dir> does not exist" ); fi; if IsExecutableFile(prg) <> true then
Error( "program <prg> does not exist or is not executable" ); fi;
# execute the process
return ExecuteProcess( dir, prg, input![1], output![1], args );
end );
InstallMethod( Process,
[ IsDirectory and IsDirectoryRep,
IsString,
IsInputTextStream and IsInputTextFileRep,
IsOutputTextStream and IsOutputTextFileRep,
IsList ],
EXECUTE_PROCESS_FILE_STREAM );
# convert input into a file if not IsInputTextFileRep(input) then if (IsString(PROCESS_INPUT_TEMPORARY) and
(IsReadableFile(PROCESS_INPUT_TEMPORARY) or
IsWritableFile(PROCESS_INPUT_TEMPORARY))) then
PROCESS_INPUT_TEMPORARY:=fail; fi; while PROCESS_INPUT_TEMPORARY = fail do
PROCESS_INPUT_TEMPORARY := TmpName();
od;
name_input := PROCESS_INPUT_TEMPORARY;
new := OutputTextFile( name_input, true );
allinput := ReadAll(input); if allinput= fail then
allinput := ""; fi;
WriteAll( new, allinput );
CloseStream(new);
input := InputTextFile( name_input ); fi;
# convert output into a file if not IsOutputTextFileRep(output) then if (IsString(PROCESS_OUTPUT_TEMPORARY) and
(IsReadableFile(PROCESS_OUTPUT_TEMPORARY) or
IsWritableFile(PROCESS_OUTPUT_TEMPORARY))) then
PROCESS_OUTPUT_TEMPORARY:=fail; fi; while PROCESS_OUTPUT_TEMPORARY = fail do
PROCESS_OUTPUT_TEMPORARY := TmpName();
od;
name_output := PROCESS_OUTPUT_TEMPORARY;
new_output := OutputTextFile( name_output, true ); else
new_output := output; fi;
# call the process
res := EXECUTE_PROCESS_FILE_STREAM( dir, prg, input, new_output, args );
# remove temporary file if IsBound(name_input) then
CloseStream(input);
RemoveFile(name_input); fi;
if IsBound(name_output) then
CloseStream(new_output);
new := InputTextFile(name_output);
alloutput := ReadAll(new);
CloseStream(new);
RemoveFile(name_output); if alloutput <> fail then
WriteAll( output, alloutput ); fi; fi;
# simply concatenate the arguments
cmd := ShallowCopy( arg[1] ); if not IsString(cmd) then
Error("the command ",cmd," is not a name.\n", "possibly a binary is missing or has not been compiled."); fi; for i in [ 2 .. Length(arg) ] do
Append( cmd, " " );
Append( cmd, arg[i] );
od;
# select the shell, bourne shell is the default: sh -c cmd if ARCH_IS_WINDOWS() then # on Windows, we use the native shell such that behaviour does # not depend on whether cygwin is installed or not. # cmd.exe is preferable to old-style `command.com'
shell := PathSystemProgram( "cmd.exe" );
cs := "/C"; else
shell := PathSystemProgram( "sh" );
cs := "-c"; fi;
# execute in the current directory
dir := DirectoryCurrent();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.