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 <trba...@gmail.com> wrote: > 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> <so... > > Hope this helps. > - Tim > > [1] System.Process > http://haskell.org/ghc/docs/6.12.2/html/libraries/process-1.0.1.2/System-Process.html > > On Oct 19, 10:12 pm, Arnaud Bailly <arnaud.oq...@gmail.com> 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 > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe