再割り当て、変数、テストを割り当てます。 (申し訳ありませんイライラ)Pythonはない場合の髪の毛を抜く変数
OKので、私はあればやろうとしている:Pythonで他には、唯一の私は、誰かが助けることができることを願っていますので、それが正常に動作させることはできません。私はできるだけ具体的にしようとします。
私は何をしなければならないのですか?> 何かが真であるかどうかを確認する変数を割り当てていますが、時にはそうでないこともあります。
その変数が真であるならば、私はそれが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のオブジェクトがグループ
を持っていません取得OS:文がelseの下でインデントされている場合は、printの前に両方の結果を返します。
私が実行している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が空であることがわかり、2番目の実行に移動します。私は、Pythonで何をしようとしているのです
。
誰かが助けることができますか?私はずっと画面で始まった後、何か単純なものを見落としていると感じています。
おかげ
EMジョエルのため
編集:
私の今のコードと結果=> コード:Debianシステム=>
から#!/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="'))
結果
python test.os-version_2.py
debian
openSUSEのlinuxmintから=>
python test.os-version_2.py
opensuse
suse
結果(から
python test.os-version_2.py
centos
rhel
結果は、私が何を実行しているcentos7 =から=>
python test.os-version_2.py
raspbian
debian
結果>のDebianベースのシステムからの
結果今はubuntu/debian basiedだが)=>
python test.os-version_2.py
linuxmint
いくつかのものが異なった反応をしているので、カップルに基づいていろいろなディストリビューションがあるので、できるだけ結果を絞るつもりです。
それぞれは、さまざまなやり方をしています。できるだけベストプラクティスのスクリプトを試してみるために、私は物事を絞り込むつもりです。
「/ etc/os-release」の場合は、別のOSの表示方法が異なって表示されます。
編集答え:
これは私がprint文に変数を入れて、それが働いている変数を印刷するためにまだある理由を私は知りません。多分誰かが私のためにそれに答えることができます。
答えコード:
#!/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
エラーが発生している行を明確にすることはできますか?あなたのOS変数が予期せずNoneに設定されていることや、あなたの "print"インデントがオフであることはほぼ確実です。 –
あなたはLinuxのディストリビューション名を取得しようとしていますので、この質問をチェックしてくださいhttp://stackoverflow.com/q/2756737/1040495 – user1040495