2012-04-12 6 views
7

Tôi sử dụng phiên bản Windows của Python. Tôi có một kịch bản Python sử dụng Pyside (không có gì phức tạp, một loại "hello world").Chúng ta có thể biết liệu một tập lệnh Python được khởi chạy từ Windows hay một thiết bị đầu cuối văn bản?

Khi tôi nhấp vào tệp tập lệnh của mình hoặc nếu tôi khởi chạy nó từ một dòng lệnh, nó thực thi hoàn hảo và tôi có GUI xuất hiện.

Tuy nhiên, tôi muốn tránh có GUI nếu tập lệnh được khởi chạy từ thiết bị đầu cuối văn bản (cmd.exe, cygwin, ...). Một loại tập lệnh tự động biết nếu nó cần có đầu ra GUI hoặc đầu ra văn bản.

Có cách nào dễ dàng và đơn giản để làm điều đó không? Tôi muốn có thể làm điều đó với phiên bản Windows Windows của Python (không phải là phiên bản đi kèm với gói Cygwin).

Một cách rõ ràng là thêm thông số "--no-gui" khi tôi khởi chạy tập lệnh từ thiết bị đầu cuối văn bản, nhưng tôi tự hỏi liệu Python (hoặc một số thư viện Python) đã cung cấp công cụ cho điều đó chưa.

Hơn nữa tôi có máy chủ SSH (Cygwin-base) trên máy tính này, tôi có thể thực thi tập lệnh ở khoảng cách nhưng không có GUI xuất hiện (tất nhiên) và tôi không có thông báo lỗi. Đó là một trường hợp rất thú vị để biết nếu kịch bản thất bại vì thiếu hỗ trợ đồ họa Windows hoặc nếu kịch bản nên thích ứng đầu ra của nó cho một thiết bị đầu cuối văn bản.

+2

Nó không trùng lặp vì câu hỏi này là về Windows, nhưng cuộc thảo luận tại http://stackoverflow.com/questions/3818511/how-to-tell-if-python-script-is-being-run -in-a-terminal-hoặc-via-gui có thể hữu ích. –

+1

thảo luận thêm cũng có tại đây: http://stackoverflow.com/questions/1285024/how-can-i-check-to-see-if-a-python-script-was-started-interactively – Jiri

Trả lời

1

Tôi biết rằng bạn có thể chạy tệp dưới dạng tệp .py hoặc dưới dạng tệp .pyw. Tùy chọn thứ hai được sử dụng cho các ứng dụng GUI và nó không mở cửa sổ giao diện điều khiển. Để phân biệt hai trường hợp này, bạn có thể kiểm tra phương thức isatty của sys.stdout.

import sys 
if sys.stdout.isatty(): 
    # .py file is running, with console window 
    pass 
else: 
    # .pyw file is running, no console 
    pass 

EDIT:

  • Tôi cố gắng để chạy mà với putty ssh + trên hộp linux - nó trả về True.
  • Tôi cố gắng để sử dụng msys bash shell trên cửa sổ hộp - nó trả về True (file py)
  • Tôi cố gắng để sử dụng Cygwin shell bash với Cygwin python - nó trả về True (file py)
  • Thật không may, Tôi không có khả năng để thử putty + windows cygwin ssh server.
+0

Bạn cũng có thể sử dụng ' pythonw.exe' để chạy mà không cần bàn điều khiển. – bereal

+0

Thú vị, nhưng không hoạt động trong mọi trường hợp. Từ cmd.exe và khi nhấp vào tập tin, isatty() là True cho một .py và False cho một .pyw, vì vậy ý ​​tưởng của bạn hoạt động tốt. Từ Cygwin và một phiên SSH (Putty và ssh cho Cygwin), isatty() là False (để nhắc nhở, tôi sử dụng phiên bản Windows của Python, không phải phiên bản Cygwin). Hay tôi nhớ điều gì đó? –

+0

Tôi thực sự xin lỗi, nhưng tôi đã thử nghiệm một lần nữa, và trái với những gì chỉnh sửa của bạn nói, nó không hoạt động với vỏ bash Cygwin. Bạn đã sử dụng phiên bản Python nào? Tôi đặc biệt nói về phiên bản Windows của Python, không phải là phiên bản đi kèm với các gói Cygwin (tôi đồng ý nó trả về True cho nó, nhưng ý tưởng là sử dụng Python cho Windows). –