Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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..?

like image 475
Aduen Avatar asked Feb 29 '12 20:02

Aduen


1 Answers

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.)

like image 75
unutbu Avatar answered Nov 12 '22 01:11

unutbu