469,929 Members | 1,409 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,929 developers. It's quick & easy.

Spawn/Exec with asterisk in argument

The spawn* and exec* functions appear to escape asterisks, I'm
guessing all shell characters too, before the spawn/exec'ed process
sees them. Is there a way around this?

Not sure if this is a bug or a "feature".

user$ touch test.txt
user$ ls -l *
-rw-r--r-- 1 user user 0 Apr 18 18:30 test.txt
user$ ls -l \*
ls: *: No such file or directory
user$ python
Python 2.3.5 (#1, Aug 12 2006, 00:08:11)
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>import os
os.system("ls -l *")
-rw-r--r-- 1 user user 0 Apr 18 18:30 test.txt
0
>>os.spawnvp(os.P_WAIT, "ls", ("ls", "-l", "*"))
ls: *: No such file or directory
1

Apr 19 '07 #1
3 2538
je*******@gmail.com wrote:
The spawn* and exec* functions appear to escape asterisks, I'm
guessing all shell characters too, before the spawn/exec'ed process
sees them.
No. It is the shell that ordinarily processes these characters and gives
them a special meaning. On most systems, ls does not give any special
meaning to asterisk.
Is there a way around this?
If you want to process asterisk the way the shell does, you can pass
things through the shell. os.system is one way of doing that. Probably
better is:

subprocess.check_call("ls -l *", shell=True)

Another way is using the glob module (and optionally
os.path.expanduser() for tilde expansion and os.path.expandvars() for
variable expansion, other things that are normally taken care of by the
shell).
--
Michael Hoffman
Apr 19 '07 #2
On Apr 18, 7:24 pm, Michael Hoffman <cam.ac...@mh391.invalidwrote:
If you want to process asterisk the way the shell does, you can pass
things through the shell. os.system is one way of doing that. Probably
better is:

subprocess.check_call("ls -l *", shell=True)
Thanks for the reply Michael. I used ls as a simple example, but I'm
using this with scp to transfer files and need shell expansion. It
makes sense since the shell isn't spawning the process, but it's been
a while since I've worked with ipc. I had converted to os.system
before posting, but subprocess gives me more control than I originally
hoped for

Thanks again

Apr 19 '07 #3
je*******@gmail.com wrote:
Thanks for the reply Michael.
No problem.
I used ls as a simple example, but I'm
using this with scp to transfer files and need shell expansion. It
makes sense since the shell isn't spawning the process, but it's been
a while since I've worked with ipc.
I usually don't think of starting new processes as being IPC. I've only
ever seen it used to refer to communicating between processes after they
have started.
--
Michael Hoffman
Apr 19 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by sarmin | last post: by
3 posts views Thread by Lingyun Yang | last post: by
2 posts views Thread by Marco | last post: by
3 posts views Thread by Sinan Nalkaya | last post: by
9 posts views Thread by Daniel Nogradi | last post: by
4 posts views Thread by Brendan Miller | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.