3

スクリプトが終了したときに、スクリプトで現在のユーザーを自動的にログアウトさせたい。Linuxベースのサーバー(Ubuntu)で実行されます。このコード行を試しましたが、機能しません。

subprocess.call(['logout'])

次のエラーが発生しました:

Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

私も試しました:

subprocess.Popen(['sudo', 'logout'])

ただし、ユーザーはログアウトするために自分のパスワードを入力する必要があります。これにsudoがないと、次のようになります。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

スクリプト自体をrootとして実行したくありません。

パスワードを入力せずに、ユーザーを直接ログアウトできるようにしたい。通常の端末でログアウトを使用する場合、通常はパスワードを入力する必要がないため、これが問題になる理由はわかりません。

すべての助けは大歓迎です。

編集:〜/ .bash_loginに少し余分なコードを追加することで問題の解決策を見つけました(私の答えを参照)が、なぜ私が上で試していることが答えられていないのですか?

4

5 に答える 5

1

あなたがやろうとしていることで、そうするための最良の方法は、おそらく、Pythonコマンドを実行してログアウトで終了するBashスクリプトでPythonコマンドをラップすることです。

ログアウトはBashの組み込み関数です。Pythonで使用できる呼び出し可能なコマンドとしては存在しません。

効果のあるもの:

#!/bin/bash

cd /path/to/script
./scriptname.py
logout

すべてをPythonで実装したいと思っていることは理解できます。ただし、PIDキルを介してセッションを単にキルするプロセスのいずれかで作業する場合は、問題が発生します。

于 2012-10-26T13:00:38.207 に答える
0

これは役立つかもしれませんが、それがあなたが必要としていることを正確に行うかどうかはわかりませんが、現在のユーザーをログアウトします(あなたが望むほどきれいではありません)

import os
os.system("pkill -KILL -u " + os.getlogin())

私はこれをすばやくテストしただけですが、うまくいったようです。

于 2012-10-26T10:25:18.593 に答える
0

親PIDを強制終了してみることができます。これは、開始したシェルである可能性がありますが、スクリプトで開始した場合は役に立ちません。

os.kill(os.getppid(),signal.SIGTERM)

ただし、ログインプログラムとして機能するようにシェルを置き換える場合は、プログラムを実行するようにログイン設定を変更するかexec、親シェルからプログラムを置き換えることができます。したがって、自分以外のものを殺す必要はありません。

于 2012-10-26T12:18:27.323 に答える
0

これはあなたのために働くでしょうか?

cmd = 'logout'
p = subprocess.Popen(cmd, shell=True)

(私は試していませんでした、ただ推測します!!)

于 2012-10-26T13:08:03.713 に答える
0

私は自分の問題の解決策を見つけました。追加した

sys.exit(1)

私のスクリプトに。

次に、次のコードを〜/.bash_loginに追加しました

if [ "$?" == "0" ]; then
    logout
fi

したがって、logout-commandは、Pythonスクリプトが終了したときに実行されます。

于 2012-10-26T13:21:36.463 に答える