By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,264 Members | 1,743 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,264 IT Pros & Developers. It's quick & easy.

Spawn/Exec with asterisk in argument

P: n/a
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
Share this Question
Share on Google+
3 Replies


P: n/a
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

P: n/a
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

P: n/a
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.