2012-04-08 33 views
6

Tôi có một tập lệnh Python quản lý một loạt các nhiệm vụ CasperJS và xử lý kết quả. Nó chạy tốt từ dòng lệnh, nhưng khi tôi chạy kịch bản trong cron, tôi nhận được lỗi:Python Subprocess trả về trạng thái thoát khác không chỉ trong cron

CalledProcessError: Command '['/path/to/casperjs', '/path/to/doSomething.js', 'args']' returned non-zero exit status 1 

Trong Python, tôi gọi CasperJS:

response = subprocess.check_output(['/path/to/casperjs', '/path/to/doSomething.js', 'args'], shell=True) 

Tôi đã thử shell=FalsePopen như tốt, nhưng tôi nhận được kết quả tương tự. Tôi cũng đã cố gắng làm cho toàn bộ lệnh một chuỗi (thay vì danh sách), nhưng điều đó cũng không giúp được gì.

Chạy '/path/to/casperjs /path/to/doSomething.js args' trả lại mã thoát 0 khi chạy trong trình bao.

Tôi cũng đã thêm PATH=/usr/bin:/bin:/sbin:/usr/local/bin vào crontab của mình không có kết quả. (Như được đề xuất trong this question.)

Bất kỳ ý tưởng nào tại sao tôi chỉ gặp lỗi này trong cron? Cảm ơn!!

EDIT: Phù hợp với câu trả lời dưới đây, thiết shell=Falsestderr=subprocess.STDOUT mọi công việc làm ...

Trả lời

8

Bạn nên cố gắng nắm bắt stderr ngoài stdout để bạn có thể tìm hiểu chính xác lý do tại sao chương trình là thất bại (giả sử nó thực sự in một số lỗi cho bạn)

cmd = ['/path/to/casperjs', '/path/to/doSomething.js', 'args'] 
response = subprocess.check_output(cmd, 
       shell=True, 
       stderr=subprocess.STDOUT) 
+1

Tôi sẽ thêm vào lý do phổ biến nhất cho "lệnh này hoạt động khi tôi chạy thủ công nhưng không theo cron/giám sát/upstart/.. "là một biến môi trường - không phải luôn luôn PATH - là khác nhau hoặc bỏ lỡ g. – mattbornski

+1

Có, tôi đã kiểm tra tất cả các biến môi trường, nhưng thiết lập 'shell = False' và thêm' stderr = subprocess.STDOUT' và bây giờ mọi thứ đều hoạt động một cách kỳ diệu? !! – arboc7

+0

@mattbornski: Ya tôi đồng ý. Của nó hoặc là, hoặc có thể là quá trình đang gặp rắc rối chạy dưới bất kỳ người dùng crontab được thiết lập như. Tôi không muốn suy đoán quá nhiều, nhưng thay vì cố gắng và tìm ra những lỗi thực sự có thể là – jdi

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