2013-04-16 42 views
6

Tôi đang viết một tập lệnh bash sẽ được gọi từ cron.Fool python's os.isatty từ tập lệnh bash

Tập lệnh bash chạy lệnh python đang phát hiện khi nó ở trong thiết bị đầu cuối bằng cách sử dụng pythons os.isatty function và xuất kết quả khác nhau tùy thuộc vào việc nó chạy thủ công hay qua cron. Điều này đang làm cho việc gỡ lỗi rất khó và tôi muốn làm cho nó luôn luôn giả định rằng nó không phải là một TTY.

Tôi muốn có thể thêm nội dung nào đó vào tập lệnh bash để đánh lừa tập lệnh python mà nó không được chạy trong thiết bị đầu cuối và do đó luôn xuất ra cùng một thứ.

Để xác nhận, tôi có quyền kiểm soát tập lệnh bash nhưng không muốn chỉnh sửa python vì đây là ứng dụng được đóng gói.

Bất kỳ ý tưởng nào?

Tôi hy vọng điều đó có ý nghĩa.

Cảm ơn bạn rất nhiều trước.

+0

Để làm rõ: làm bạn muốn kịch bản để "nghĩ" rằng nó _is_ chạy với một tty hoặc là nó _is not_ chạy với một? –

+0

chỉ cần gọi isatty một lần và lưu trữ nó ở một số nơi có thể truy cập toàn cầu ... bây giờ bạn chỉ có thể đặt giá trị của bạn đúng hay sai ... nếu bạn đang làm os.isatty trên tất cả các nơi có lẽ không phải là hình thức tuyệt vời anyway –

+0

ExP: I 'd như kịch bản để "nghĩ" rằng nó không chạy với TTY – Dogsbody

Trả lời

5

Bạn có thể chuyển hướng đầu ra đến cat (giả sử tập lệnh kiểm tra sys.stdout 's mô tả tập tin' s atty -ness).

python myscript.py | cat 

a.py

import sys 
print sys.stdout.isatty() 

để kiểm tra:

> python a.py 
True 
> python a.py | cat 
False 
+3

Brilliant! Công việc này như một cái duyên vậy. Cảm ơn bạn :-) – Dogsbody

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