私の知る限り、これは辞書自体とは関係ありませんが、出力を解析しています。ここで私は得る出力の例を示します。
SESSION UID USER SEAT
c2 1000 willem seat0
1 sessions listed.
または文字列のバージョン:
' SESSION UID USER SEAT \n c2 1000 willem seat0 \n\n1 sessions listed.\n'
このすべてがstdout
に表示されます。問題は - ご覧のとおり - すべての行に4つの単語が含まれているわけではありません(下部に空の行があります)。以上のニシキヘビ:私も書き換えたコードで
def sessions():
newDict = {}
output = exe(['loginctl','list-sessions']) # uses subprocess.check_output(). returns shell command's multiline output
i = 0;
for line in output.split('\n'):
words = line.split()
if len(words) >= 4:
newDict[i] = {'session':words[0], 'uid':words[1], 'user':words[2], 'seat':words[3]}
i += 1
stdout(newDict)
(変更は太字で強調表示)
:
>>> lines[2].split()
[]
あなたは、このようにラインが4つの列を持っているかどうかのチェックを実装する必要がありますwords[4]
〜words[3]
。
exeとは?あなたは幹部を意味しましたか? –
おそらく5ワード未満の行があるので、 'words [4]'はIndexErrorを発生させます。最後の行には空の行がありますので、output.strip()。split( '\ n') '行で' 'それを取り除いてみてください。 –
@AndrésPrez-AlbelaH。編集された質問。 – aceph