2

私は(Windowsで)名前を公開しないプログラムを使用しています。このプログラムは、認証を受けずにコマンドラインから開くことができます。他の人がこの方法でアクセスできないように、セキュリティを作成しようとしています。

このプログラムの組み込みバイナリを、自分の認証システムを指す最初の行(pythonで実装され、py2exeで.exeにコンパイルされた)を含むバッチファイルに置き換え、2行目を開くコマンドに置き換える予定です。プログラム。

私の当初の計画は、認証が次のようなもので失敗した場合に、スクリプト(auth.py)がバッチファイルの2行目の実行を停止するようにすることでした。

if not authenticated:
    print('Authentication failed')
    sys.exit(1)
else:
    print('Successfully authenticated!')

私はこれを行うためにsys.exit(1)を頼りにしていましたが、スクリプトの開発が完了するまで、わざわざテストすることはしませんでした。今、私はsys.exitがPythonプロセスを終了するだけであることに気付きました。

Pythonスクリプトからバッチプロセスを停止する方法、またはバッチがauth.pyからの終了コード(失敗した場合は1、合格した場合は0)を検出し、終了コードがそこから0。

誰かが私に何か提案や助けをくれたら、本当にありがたいです。ありがとう!

4

3 に答える 3

2

subprocess認証が成功したときにプログラムを呼び出すために使用します。したがって、Pythonスクリプトは、バッチファイルではなく、プログラムを起動します。

if not authenticated:
    print('Authentication failed')
    sys.exit(1)
else:
    print('Successfully authenticated!')
    proc = subprocess.Popen([program])

ユーザーがPythonまたはバッチスクリプト内からプログラムを開始する権限を持っている場合、ユーザーがプログラムに直接アクセスすることを妨げるものは何もないことに注意してください。これにより、誰もプログラムにアクセスできなくなります。多分極端な非技術的なものを保存します。

于 2012-08-10T18:27:26.010 に答える
1

Pythonプロセスの親PIDを見つけてそれを強制終了するために非常に複雑なことを行うか%ERRORLEVEL%、バッチファイルでをチェックすることができます。何かのようなもの:

python auth.py
if %ERRORLEVEL% neq 0 exit /B 1
于 2012-08-10T18:26:54.183 に答える
1

これらの2つの方法が役立つことを願っています
http://metazin.wordpress.com/2008/08/09/how-to-kill-a-process-in-windows-using-python/http://code.activestate
.com / recipes / 347462-termination-a-subprocess-on-windows /

于 2012-08-10T18:35:45.627 に答える