D2 using std.proccess.shell

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Thu Jul 9 02:20:54 PDT 2009


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


More information about the Digitalmars-d-learn mailing list