D2 using std.proccess.shell

Jesse Phillips jessekphillips at gmail.com
Thu Jul 9 07:40:48 PDT 2009


On Thu, 09 Jul 2009 11:20:54 +0200, Lars T. Kyllingstad wrote:

> Jesse Phillips wrote:
>> On Tue, 07 Jul 2009 12:04:43 +0200, Lars T. Kyllingstad wrote:
>> 
>>> Jesse Phillips wrote:
>>>> I don't know if I'm misunderstanding the use of shell() or if this is
>>>> a bug. Trying to run some programs with shell error with a could not
>>>> close file. Sadly it I can come to any reasonable conclusion as to
>>>> why.
>>>>
>>>> Example output from running writeln(shell("gcc")) gcc: no input files
>>>> std.contracts.ErrnoException: std/stdio.d(336): Could not close file
>>>> `gcc' (Success)
>>>>
>>>> Note that the program was executed correctly printing the error
>>>> message, and the appended (Success) massage...? Also shell("gcc -v")
>>>> works as with proper output and no error.
>>>>
>>>> Similar errors trying to run shell("dmd") unsure if this is related
>>>> to the programs not being in /bin.
>>>
>>> I think it's a bug in Phobos. Note that you get the exact same result
>>> even if you remove the enclosing writeln(), which means that the
>>> program's standard output stream hasn't been intercepted. Although I'm
>>> unsure about the details, it seems that the std.stdio.File object that
>>> should encapsulate the program's output stream isn't opened correctly,
>>> and thus an exception is thrown when an attempt is made to close it.
>>>
>>> Probably you don't get an error for "gcc -v" because the output of
>>> this command is printed to standard error instead of standard output.
>>>
>>> -Lars
>> 
>> Thanks, I try and narrow down when this happens. I first assumed it was
>> because running GCC without anything outputs to stderr and not stdout,
>> but that wouldn't explain the DMD issue. ("ggc -v" goes to stdout)
> 
> 
> It happens whenever the program you try to run has a nonzero return
> value. I'll file a bug report, if you haven't done it already.
> 
> -Lars

Thanks.


More information about the Digitalmars-d-learn mailing list