2012-02-29 29 views
7

Tôi đang cố gắng chạy gphoto2 từ python nhưng, không có succes. Nó chỉ trả về lệnh không tìm thấy. gphoto được cài đặt chính xác, như trong, các lệnh hoạt động tốt trong Terminal.Trả về cuộc gọi subprocess của Python "lệnh không tìm thấy", Thiết bị đầu cuối thực hiện chính xác

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 

Tôi biết rằng có điều gì đó buồn cười về thiết bị đầu cuối osx (ứng dụng) nhưng, kiến ​​thức của tôi về OSX là ít ỏi.

Bất kỳ suy nghĩ nào về điều này?

EDIT

thay đổi một số mã của tôi, các lỗi khác xuất hiện

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

sử dụng đường dẫn đầy đủ '/ opt/local/bin/gphoto2'

nhưng nếu ai đó quan tâm để giải thích vỏ nào để sử dụng hoặc cách đăng nhập và có thể có cùng chức năng ..?

+1

Tại sao bạn không sử dụng 'subprocess.check_output() 'hoặc đầu ra toàn bộ điều tại một thời điểm? – Gandaro

Trả lời

7

Khi sử dụng shell = True, đối số đầu tiên để subprocess.Popen phải là một chuỗi, không phải là một danh sách:

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

Tuy nhiên, sử dụng shell = True nên tránh nếu có thể vì nó có thể là một security risk (xem Cảnh báo).

Vì vậy, thay vì sử dụng

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

(Khi shell = False, hoặc nếu tham số shell được bỏ qua, đối số đầu tiên phải là một danh sách.)

+0

cảm ơn, đã mã hóa lại mã của tôi một cách chính xác. Mặc dù nó không mang lại cho tôi thêm nữa. Tôi đã sửa bài viết của tôi – Aduen

+3

Điều gì sẽ xảy ra nếu bạn sử dụng đường dẫn đầy đủ đến 'gphoto2'? – unutbu

+0

cố gắng tìm nó nhưng, như đã nói, osx không phải là bạn của tôi ... – Aduen

Các vấn đề liên quan