|
From: Mark D. <mar...@zn...> - 2007-03-27 05:31:44
|
Hi Eric,
Thanks for the pointer to ExecuteArgs;
Wx::Perl::ProcessStream->OpenProcess() now accepts an array ref or a command string as the first argument.
The array form is implemented simply as a call to Wx::ExecuteArgs;
Added a test and uploaded a new version.
Regards
Mark
Eric Wilhelm wrote:
> # from Mark Dootson
> # on Monday 26 March 2007 09:03 pm:
>
>> I'd appreciate any comments and views on code, process and namespace.
>
> I would really like to see some sort of list-context (\@command or
> otherwise) functionality. I've only briefly looked at the source, so
> there might be some underlying implementation nit forcing your hand
> here.
>
> my $process = Wx::Perl::ProcessStream->OpenProcess(
> $command, $name, $eventhandler);
>
> With a quick glance around, it seems that Wx.pm supports the
> "wxExecute(char **argv,..." form via ExecuteArgs(). It also looks like
> this would be no different than using ExecuteCommand() in terms of
> firing the callback. Perhaps detecting whether $command is an array
> ref would do it?
>
> Of course, I'm assuming here that the list form in ExecuteArgs() carries
> all of the not-running-a-shell benefits of `exec(@list)` (such as "no
> need to escape spaces in filenames" to name one very common example.)
> If I'm wrong, ugh. See also: execvp(3). The wx docs aren't exactly
> clear on what happens so ... at least the unix implementation
> ("src/unix/utilsunx.cpp") reads as if they've reinvented shell
> escaping. Neat. So, maybe the semicolon ends up as an argument (I
> think perl goes out of its way to fire-up a shell.) Ooh. The windows
> implementation puts everything together and calls the string form due
> to the nature of CreateProcess. Yay. Well, I see from win32/win32.c
> create_command_line() that perl works a little harder.
>
> In any case, I typically build command and arguments as lists. Would
> rather not have to do join(" ", map({escape($_)} @list)) and then have
> wx go through that and split on spaces when the operating system is
> otherwise quite capable of executing a list of "command and arguments".
> I guess just leave "what should we do when the operating system is not
> so capable?" as an exercise for the reader.
>
> --Eric
|