拉出頭髮。 (對不起沮喪)python分配變量,測試,如果真的跳過else,如果不是重新分配變量
好的,所以我想要做一個if:else在Python中,只有我不能讓它正常工作,所以我希望有人可以幫助。我會嘗試儘可能具體。
我正在做什麼 - > 我正在分配一個變量來檢查是否爲真,有時候它不是。
如果該變量爲true,那麼我希望它跳過else語句並打印出結果。 (一旦全面實施將resutlt返回腳本,而不是打印)
Python代碼:
import re
os_version = open('/etc/os-release')
for line in os_version:
OS = re.search(r'\AID_LIKE=\D[A-Za-z]+', line)
if OS:
print(str(OS.group()).lstrip('ID_LIKE="'))
else:
OS = re.search(r'\AID=\D[A-Za-z]+', line)
print(str(OS.group()).lstrip('ID="'))
當我像這樣運行它,我得到一個NoneType對象沒有組
,如果我有一個如果操作系統:語句縮小在其他打印之前,然後我得到兩個結果回來,即使我在第一次打印後有'休息'
取決於我運行的Linux平臺取決於應該是什麼結果。
示例(bash的代碼)
#!/bin/bash
VAR0=`cat /etc/os-release | grep -w ID_LIKE | cut -f2 -d= |\
tr -d [=\"=] | cut -f1 -d' '`
VAR0="${VAR0:=`cat /etc/os-release | grep -w ID | cut -f2 -d= |\
tr -d [=\"=]`}"
echo $VAR0
if [ "$VAR0" = 'debian' ]; then
echo 'DEBIAN based'
elif [ "$VAR0" = 'rhel' ]; then
echo 'RHEL based'
elif [ "$VAR0" = 'suse' ]; then
echo 'SUSE based'
else echo 'OTHER based'
fi
這是從來自不同OS->
bash -o xtrace test_2.sh
++ tr -d '[="=]'
++ cut -f1 '-d '
++ cut -f2 -d=
++ grep -w ID_LIKE
++ cat /etc/os-release
+ VAR0=
++ tr -d '[="=]'
++ grep -w ID
++ cut -f2 -d=
++ cat /etc/os-release
+ VAR0=debian
+ echo debian
debian
+ '[' debian = debian ']'
+ echo 'DEBIAN based'
DEBIAN based
bash的代碼 - >
bash -o xtrace os-version.sh
++ cat /etc/os-release
++ grep -w ID_LIKE
++ cut -f2 -d=
++ tr -d '[="=]'
++ cut -f1 '-d '
+ VAR0=rhel
+ VAR0=rhel
+ echo rhel
rhel
+ '[' rhel = debian ']'
+ '[' rhel = rhel ']'
+ echo 'RHEL based'
RHEL based
作爲回來的返回你可以看到第一次運行的VAR0是空的,然後轉到第二次。
這就是我想要做的與python。
有人可以幫忙嗎?我有一種感覺,我只是在屏幕上開始很長時間後忽略了一些簡單的東西。
感謝
EM
編輯喬爾:
現在我的代碼,結果=> 代碼:
#!/usr/bin/python3
import re
os_version = open('/etc/os-release')
for line in os_version:
OS = re.search(r'\AID_LIKE=\D[A-Za-z]+', line)
if OS:
print(str(OS.group()).lstrip('ID_LIKE="'))
break
else:
OS = re.search(r'\AID=\D[A-Za-z]+', line)
if OS:
print(str(OS.group()).lstrip('ID="'))
結果從Debian系統=>
python test.os-version_2.py
debian
從=>
python test.os-version_2.py
raspbian
debian
從centos7 =結果>從openSUSE的=>
python test.os-version_2.py
opensuse
suse
結果從linuxmint(
python test.os-version_2.py
centos
rhel
結果就是我運行一個基於Debian的系統個
結果現在,即使它是ubuntu/debian basied)=>
python test.os-version_2.py
linuxmint
因此,因爲有些事情的反應不同,有很多不同的發行版基於一對夫婦,我試圖儘可能減少結果的範圍。
每個人都有不同的方式,他們做事情,並試圖獲得跨平臺的腳本儘可能最好的腳本,我試圖縮小範圍。
如果你的'cat/etc/os-release'你會看到不同的os顯示的東西不同。
編輯答案:
我不知道爲什麼,這又是我把一個變量來打印報表,然後打印它的工作變量。也許有人可以爲我回答。
答案代碼:
#!/usr/bin/python3
import re
os_version = open('/etc/os-release')
for line in os_version:
OS = re.search(r'\AID_LIKE=\D[A-Za-z]+', line)#.group()
if OS is not None:
base_distro = (str(OS.group()).lstrip('ID_LIKE="'))
else:
OS = re.search(r'\AID=\D[A-Za-z]+', line)#.group()
if OS is not None:
base_distro = (str(OS.group()).lstrip('ID="'))
print(base_distro)
,如果你將它放入一個腳本,然後運行它,你會明白我要找的。
感謝大家的幫助
我應該補充說,我對這個東西有點新鮮。可以很好地閱讀編程,但不能讓我的大腦寫它。 – emetib
你能否澄清哪條線給出錯誤?幾乎可以肯定的是,你的操作系統變量意外地被設置爲None,並且/或者你的「打印」縮進關閉了。 –
你正試圖獲得Linux發行版的名稱,所以檢查這個問題http://stackoverflow.com/q/2756737/1040495 – user1040495