Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

shell - Python subprocess call returns "command not found", Terminal executes correctly

I am trying to run gphoto2 from python but, with no succes. It just returns command not found. gphoto is installed correctly, as in, the commands work fine in Terminal.

p = subprocess.Popen(['gphoto2'], shell=True, stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT, executable='/bin/bash')

for line in p.stdout.readlines():
    print line
p.wait()

/bin/bash: gphoto2: command not found

I know that there is something funny about the osx Terminal (app) but, my knowledge on osx is meager.

Any thoughts on this one?

EDIT

changed some of my code, other errors appear

p = subprocess.Popen(['gphoto2'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout:
    print line


    raise child_exception
OSError: [Errno 2] No such file or directory

EDIT

using full path '/opt/local/bin/gphoto2'

but if someone care to explain which shell to use or how to log in and be able to have the same functionality..?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

When using shell = True, the first argument to subprocess.Popen should be a string, not a list:

p = subprocess.Popen('gphoto2', shell=True, ...)

However, using shell = True should be avoided if possible since it can be a security risk (see the Warning).

So instead use

p = subprocess.Popen(['gphoto2'], ...)

(When shell = False, or if the shell parameter is omitted, the first argument should be a list.)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

56.6k users

...