[Twisted-Python] Problem with process ?

Andrew Bennetts andrew-twisted at puzzling.org
Tue Sep 14 08:31:36 EDT 2004


On Tue, Sep 14, 2004 at 01:58:37PM +0200, Philippe Bouige wrote:
[...]
> 
>    But when i change
>    by :
>    return utils.getProcessOutput("ls",["-l *"])   
>    or :
>    return utils.getProcessOutput("ls",["-l -a"])
>    or :
>    return utils.getProcessOutput("ls",["-l ."])
> 
>    and i have allways this error, but I don't undestand ??

It's because you need to pass the paramater list that's passed to exec(2),
not a command string that's passed to sh(1).

At the kernel (i.e. syscall) level, the exec syscall receives a list of
strings, where each argument in argv is a string, and can contain spaces or
* or anything character, except '\0'.

At the level you're probably used to, the shell, you just type "ls -ld *" or
whatever, and the shell expands and splits that up into the list of strings
for the exec syscall (in this example, something like ["ls", "-ld", "file1",
"file2", ...]).

If you want to do the shell's expansion and splitting of a commandline, just
explicitly invoke then shell:

    return utils.getProcessOutput('sh', ['-c "ls -l *"'])

(But beware passing user input directly into that; it's potentially a big
security hole that will allow running of arbitrary shell commands)

-Andrew.





More information about the Twisted-Python mailing list