Return value of a (windows) process

Hello, I have the following code (fragment) I use to wrap execution of various processes in Haskell, in the spirit of Don Stewart's slides about "Scripting in Haskell". instance MonadExec IO where exec proc args = do (exit, out, err) <- liftIO $ readProcessWithExitCode proc args "" case exit of ExitFailure e -> throwError $ userError ("Fail execution of " ++ program proc args ++ ": " ++ (show e) ++", " ++err) ExitSuccess -> return out Here is the abridged declaration of MonadExec: class (Monad m) => MonadExec m where exec :: String -> [String] -> m String The issue I am facing is that readProcessWithExitCode does not seem to return the expected failures. When I run some failing process within windows command shell, I have: D:\projets\psug-dojo\lags>"d:/Program Files/scala-2.8.0/bin/scalac.bat" -d target\test-classes -classpath target\classes;D:\projets\ psug-dojo\lags\test-lib\specs_2.8.0-1.6.5.jar;D:\projets\psug-dojo\lags\test-lib\scalacheck_2.8.0-1.7.jar;D:\projets\psug-dojo\lags\ test-lib\junit-4.7.jar -d target\test-classes src\test\scala\oqube\lags\LagsTest.scala src\test\scala\oqube\lags\LagsTest.scala:86: error: not found: value beS_== bid.sublists(List(Request(1,2,3))) must beS_==(List(Nil,List(Request(1,2,3)))) ^ one error found D:\projets\psug-dojo\lags>echo %ERRORLEVEL% 1 D:\projets\psug-dojo\lags> but wrapping this same process in my "shell", I always got an ExitSuccess. What am I doing wrong ? Thanks Arnaud

I have never used the above function you refer to so I am not sure
about it's semantics. However, I have successfully used functions in
System.Process module [1] (fairly standard) to spawn processes and get
their exit codes on Windows.
For example, (javac exits code 2 when provided no arguments)
C:\Documents and Settings\Tim>javac
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
... snip
C:\Documents and Settings\Tim>echo %ERRORLEVEL%
2
C:\Documents and Settings\Tim>ghci
GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> :m System.Process
Prelude System.Process> readProcessWithExitCode "c:\\jdk6\\bin\
\javac.exe" [] ""
(ExitFailure 2,"","Usage: javac <options>
Hello, I have the following code (fragment) I use to wrap execution of various processes in Haskell, in the spirit of Don Stewart's slides about "Scripting in Haskell".
instance MonadExec IO where exec proc args = do (exit, out, err) <- liftIO $ readProcessWithExitCode proc args "" case exit of ExitFailure e -> throwError $ userError ("Fail execution of " ++ program proc args ++ ": " ++ (show e) ++", " ++err) ExitSuccess -> return out
Here is the abridged declaration of MonadExec: class (Monad m) => MonadExec m where exec :: String -> [String] -> m String
The issue I am facing is that readProcessWithExitCode does not seem to return the expected failures. When I run some failing process within windows command shell, I have:
D:\projets\psug-dojo\lags>"d:/Program Files/scala-2.8.0/bin/scalac.bat" -d target\test-classes -classpath target\classes;D:\projets\ psug-dojo\lags\test-lib\specs_2.8.0-1.6.5.jar;D:\projets\psug-dojo\lags\test-lib\scalacheck_2.8.0-1.7.jar;D:\projets\psug-dojo\lags\ test-lib\junit-4.7.jar -d target\test-classes src\test\scala\oqube\lags\LagsTest.scala src\test\scala\oqube\lags\LagsTest.scala:86: error: not found: value beS_== bid.sublists(List(Request(1,2,3))) must beS_==(List(Nil,List(Request(1,2,3)))) ^ one error found
D:\projets\psug-dojo\lags>echo %ERRORLEVEL% 1
D:\projets\psug-dojo\lags>
but wrapping this same process in my "shell", I always got an ExitSuccess.
What am I doing wrong ?
Thanks Arnaud _______________________________________________ Haskell-Cafe mailing list Haskell-C...@haskell.orghttp://www.haskell.org/mailman/listinfo/haskell-cafe

Well, I must be doing something wrong but don't know where, the code
is rather straightforward.
Or the scalac.bat script is buggy:
Prelude Environment System.Process> readProcessWithExitCode
"d:/Program Files/scala-2.8.0/bin/scalac.bat" ["-d","target"] ""
(ExitSuccess,"","Exception in thread \"main\"
scala.tools.nsc.FatalError: target does not exist or is not a
directory\n\tat
scala.tools.nsc.settings.MutableSettings$OutputDirs.checkDir(MutableSettings.scala:227)\n\tat
scala.tools.nsc.settings.MutableSettings$OutputDirs.setSingleOutput(MutableSettings.scala:236)\n\tat
scala.tools.nsc.settings.MutableSettings$OutputSetting.value_$eq(MutableSettings.scala:452)\n\tat
scala.tools.nsc.settings.MutableSettings$OutputSetting.value_$eq(MutableSettings.scala:445)\n\tat
scala.tools.nsc.settings.MutableSettings$StringSetting.tryToSet(MutableSettings.scala:418)\n\tat
scala.tools.nsc.settings.MutableSettings$$anonfun$parseNormalArg$1$1$$anonfun$apply$3.apply(MutableSettings.scala:121)\n\tat
scala.tools.nsc.settings.MutableSettings$$anonfun$parseNormalArg$1$1$$anonfun$apply$3.apply(MutableSettings.scala:121)\n\tat
scala.tools.nsc.settings.MutableSettings.tryToSetIfExists$1(MutableSettings.scala:98)\n\tat
scala.tools.nsc.settings.MutableSettings.parseNormalArg$1(MutableSettings.scala:121)\n\tat
scala.tools.nsc.settings.MutableSettings.doArgs$1(MutableSettings.scala:154)\n\tat
scala.tools.nsc.settings.MutableSettings.parseParams(MutableSettings.scala:160)\n\tat
scala.tools.nsc.settings.MutableSettings.processArguments(MutableSettings.scala:44)\n\tat
scala.tools.nsc.CompilerCommand.processArguments(CompilerCommand.scala:87)\n\tat
scala.tools.nsc.CompilerCommand.<init>(CompilerCommand.scala:91)\n\tat
scala.tools.nsc.Main$.process(Main.scala:52)\n\tat
scala.tools.nsc.Main$.main(Main.scala:122)\n\tat
scala.tools.nsc.Main.main(Main.scala)\n")
Arnaud
On Wed, Oct 20, 2010 at 8:46 PM, Tim
I have never used the above function you refer to so I am not sure about it's semantics. However, I have successfully used functions in System.Process module [1] (fairly standard) to spawn processes and get their exit codes on Windows.
For example, (javac exits code 2 when provided no arguments)
C:\Documents and Settings\Tim>javac Usage: javac <options> <source files> where possible options include: -g Generate all debugging info ... snip
C:\Documents and Settings\Tim>echo %ERRORLEVEL% 2
C:\Documents and Settings\Tim>ghci GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Loading package ffi-1.0 ... linking ... done. Prelude> :m System.Process Prelude System.Process> readProcessWithExitCode "c:\\jdk6\\bin\ \javac.exe" [] "" (ExitFailure 2,"","Usage: javac <options>
Hope this helps. - Tim
[1] System.Process http://haskell.org/ghc/docs/6.12.2/html/libraries/process-1.0.1.2/System-Pro...
On Oct 19, 10:12 pm, Arnaud Bailly
wrote: Hello, I have the following code (fragment) I use to wrap execution of various processes in Haskell, in the spirit of Don Stewart's slides about "Scripting in Haskell".
instance MonadExec IO where exec proc args = do (exit, out, err) <- liftIO $ readProcessWithExitCode proc args "" case exit of ExitFailure e -> throwError $ userError ("Fail execution of " ++ program proc args ++ ": " ++ (show e) ++", " ++err) ExitSuccess -> return out
Here is the abridged declaration of MonadExec: class (Monad m) => MonadExec m where exec :: String -> [String] -> m String
The issue I am facing is that readProcessWithExitCode does not seem to return the expected failures. When I run some failing process within windows command shell, I have:
D:\projets\psug-dojo\lags>"d:/Program Files/scala-2.8.0/bin/scalac.bat" -d target\test-classes -classpath target\classes;D:\projets\ psug-dojo\lags\test-lib\specs_2.8.0-1.6.5.jar;D:\projets\psug-dojo\lags\test-lib\scalacheck_2.8.0-1.7.jar;D:\projets\psug-dojo\lags\ test-lib\junit-4.7.jar -d target\test-classes src\test\scala\oqube\lags\LagsTest.scala src\test\scala\oqube\lags\LagsTest.scala:86: error: not found: value beS_== bid.sublists(List(Request(1,2,3))) must beS_==(List(Nil,List(Request(1,2,3)))) ^ one error found
D:\projets\psug-dojo\lags>echo %ERRORLEVEL% 1
D:\projets\psug-dojo\lags>
but wrapping this same process in my "shell", I always got an ExitSuccess.
What am I doing wrong ?
Thanks Arnaud _______________________________________________ Haskell-Cafe mailing list Haskell-C...@haskell.orghttp://www.haskell.org/mailman/listinfo/haskell-cafe
Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (2)
-
Arnaud Bailly
-
Tim