KProcess overhaul [PATCH]

Ralf Habacker ralf.habacker at freenet.de
Tue Apr 18 21:55:47 BST 2006


Oswald Buddenhagen schrieb:
>> I like more to setup relevants options on one place and to use it 
>> without conditions later , but this could also be implemented in another 
>> way. :-)
>>
>>     
> you can #define C_ARG in an #ifdef, if you like. or you could split the
> line and have only the relevant part #ifdef'd.
>   
Yes, forgot to say that I had also in mind that this option could be 
changed at runtime for example adding -x for shell debugging and so one. 
But this could be added also later. :-)

>   
>>>>> 2) you botched the command composition. it is 
>>>>> "shell -c <all-arguments-concatenated>", not "shell -c <arg> <arg> ...".
>>>>> on windows that does not matter, as everything is more or less simply
>>>>> concatenated into one string anyway, but on unix it does.
>>>>>
>>>>>      
>>>>>           
>>>> I don't know how to implement this on unix.
>>>>
>>>>    
>>>>         
>>> you could simly read the old code.
>>> honestly, you are scaring me by playing with this stuff. get yourself *a
>>> bit* into the topic first, for *all* relevant platforms.
>>>
>>>  
>>>       
>> Hmmh, KProcess::start() and KProcess::execute() a QStringList as 
>> arguments, so it would be easy to add this support in these methods.
>>
>> void KProcess::startShell( const QString & program, const QStringList & 
>> arguments )
>> {
>>    args = quoteArguments(arguments);
>>    return start(KProcessPrivate::shell, QStringList() << "/c" << 
>> program << args );
>> }
>>
>>
>> Additional on windows quoting is already implemented in 
>> QProcess::execute() and QProcess::start() (see see 
>> http://doc.trolltech.com/4.1/qprocess.html)
>>
>>     
> yes, windows sucks. :)
>   
>> Do you expect a full working solutions for all platforms in this state ?
>>
>>     
> well, no. but you should be perfectly clear about the QProcess calls the code
> is supposed to produce - and in this case the code is quite trivial once
> you know what you want.
>   
Because of that I wrote the unit test from the beginning. It helps me to 
think about what should work how.
For example after your objectivites related to quoting I have add a todo 
entry for a quoting test , which will check if this really works like 
expected. :-)

>> The executeShell() and startShell() methods are such a proposal, maybe 
>> it would be better to add this to KShell, which could be the Shell 
>> Starter class as KShellProcess is recent.
>>
>>     
> no, KShell is not about execution, it is about parsing and constructing
> shell syntax.
>
> the bottom line is that execution through a shell is hard to get
> portable at all, and once done, the benefits are relatively minor -
> sounds like the reason why qt 4 still does not have it. not that i'm
> opposed to the idea ...
>   
I recognized this too while writing the unit test.

How should we go on ?

Ralf








More information about the kde-core-devel mailing list