2015-05-03 20 views
5

Tôi muốn thêm một tấm séc trong một kịch bản python 2.7.x theo hình thứcLàm thế nào để kiểm tra xem hệ thống là FreeBSD trong một kịch bản python?

if __check_freebsd__(): 
    # run actions which would only work on FreeBSD (e.g. create a jail) 
elif __check_debian__(): 
    # run an alternative that runs on Debian-based systems 
else: 
    raise Error("unsupported OS") 

Làm thế nào sẽ là __check_freebsd__ chức năng như thế nào?

Tôi có đoạn code sau cho __check_debian__ đã:

try: 
    lsb_release_id_short = sp.check_output([lsb_release, "-d", "-s"]).strip().decode("utf-8") 
    ret_value = "Debian" in lsb_release_id_short 
    return ret_value 
except Exception: 
    return False 

Vì vậy, bạn không cần phải bận tâm với nó (đề xuất cải thiện được chào đón, tất nhiên).

Trả lời

2

Như đã nêu in documentation,

platform.system() 

trả về tên hệ điều hành nền tảng, vì vậy bạn có thể sử dụng này. Trong this thread bạn cũng có thể thấy các cách tiếp cận khác nhau để kiểm tra hệ điều hành bên dưới.

+0

'nếu platform.system() == 'FreeBSD'' nên làm việc, như xa như tôi lo ngại. Karl hỏi về kiểm tra freeBSD, vì vậy tôi nghĩ rằng tôi không cần phải kiểm tra Linux distro. Nếu tôi sai, xin vui lòng sửa tôi. – Adalee

+0

Hoạt động trên FreeBSD 9.3 và FreeBSD 10.0. –

1

Nhìn vào os.uname.

Tôi không chắc chắn 100%, nhưng có thể là một cái gì đó như os.uname()[0] == "FreeBSD".

1

Hãy thử điều này:

>>> from sys import platform 
>>> platform() 
# on my system I get 
'linux' # check string for freebsd 

Ngoài ra:

# below are my results 
>>> import platform 
>>> platform.system() 
'Linux' # would be 'FreeBSD' if I was using that 
>>> platform.platform() 
'Linux-3.19.0-15-generic-x86_64-with-Ubuntu-15.04-vivid' 
+0

'platform.linux_platform()' trả về '('', '', '')' trong FreeBSD 9.3 (chạy trên 'qemu' 2.2). –

+0

@KarlRichter nó chỉ dành cho Linux, vì vậy nó sẽ không hoạt động cho FreeBSD tôi giả sử. platform.system() là nền tảng mặc dù là sys.platform – Totem

+0

Tôi hiểu. Sau đó, nó không phải là một câu trả lời cho câu hỏi của tôi, phải không? Có lẽ đây là do 'qemu'? –

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