1

こんにちは、

この方法のバージョンを使用して、12 個のドライブ文字をマップしました。

# Drive letter: M
# Shared drive path: \\shared\folder
# Username: user123
# Password: password
import subprocess

# Disconnect anything on M
subprocess.call(r'net use * /del', shell=True)

# Connect to shared drive, use drive letter M
subprocess.call(r'net use m: \\shared\folder /user:user123 password', shell=True)

上記のコードは、プログラムで使用されているファイルを含むフォルダーがない限り、うまく機能します。

コマンドウィンドウで同じコマンドを実行し、ドライブを切断しようとしたときにファイルが使用中の場合、Are you sure? が返されます。はい/いいえ

この質問を Py スクリプトを介してユーザーに返すにはどうすればよいですか (または、他に何もない場合は、コードを引き続き実行できるように強制的に切断しますか?

4

1 に答える 1

0

/yes強制的に切断するには、次のように試してください

subprocess.call(r'net use * /del /yes', shell=True)  

質問をユーザーに「リダイレクト」するには、(少なくとも) 2 つの可能なアプローチがあります。

  • サブプロセスの標準入出力ストリームの読み書き
  • 終了コードを処理し、必要に応じてサブプロセスをもう一度開始します

最初のアプローチは、標準出力を読み取って現在のロケールに固有のそれを解釈し、後で現在のロケールに固有の質問に答える必要があるため、非常に脆弱です (たとえば、確認は 'Y' で行われます)英語ですが、ドイツ語では「J」など)

2 番目の方法は、多かれ少なかれ静的な戻りコードに依存するため、より安定しています。簡単なテストを行ったところ、質問をキャンセルした場合のリターン コードは 2 です。もちろん、成功の場合は 0 です。したがって、次のコードを使用すると、質問を処理し、ユーザー入力に基づいて操作できるはずです。

import subprocess

exitcode = subprocess.call(r'net use * /del /no', shell=True)
if exitcode == 2:
    choice = input("Probably something bad happens ... still continue? (Y/N)")
    if choice == "Y":
        subprocess.call(r'net use * /del /yes', shell=True)
    else:
        print("Cancelled")
else:
    print("Worked on first try")
于 2016-07-25T15:06:59.700 に答える