2016-07-25 4 views
1

グッドアフタヌーンを必要とするときに処理する方法、マッピングウィンドウは、Pythonドライブ:勝利CMDラインが入力

私はダースのドライブ文字をマップするために、このメソッドのバージョンを使用:

# 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) 

上記のコードの作品私がプログラムで使用しているファイルを含むフォルダを持っていない限り素晴らしい。

cmdウィンドウで同じコマンドを実行していて、ドライブを切断しようとするとファイルが使用されている場合は、が返されますか? Y/N

どのように私はPyのスクリプトを経由して戻ってユーザーにこの質問を渡す(または何もない場合は、コードの実行を継続できるように、切断を強制?

答えて

0

をそう

よう /yesでそれをしようと切断強制的にすることができます
subprocess.call(r'net use * /del /yes', shell=True) 

あなたが持っているユーザーへの質問(少なくとも)2つの可能なアプローチ 'リダイレクト' するためには:

  • 読むと、サブプロセスの終了コードと
  • 作業の標準入力/出力ストリームに書き込み、必要に応じて

最初のアプローチは非常に脆弱であれば、あなたが読むために持っているように、サブプロセスをもう一度開始現在のロケールに固有のものを解釈するだけでなく、後であなたの現在のロケールに固有の質問に答えることもできます。

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") 
+0

DAXaholicありがとうございます。質問をユーザーに返す方法がありますか、または接続を唯一の方法で強制していますか?これは時間の99%で良いでしょうが、切断される前に忘れてしまった仕事を失ってしまう人がいることがわかります(しかし、これらは再び質問/警告でも仕事を失うでしょう)。 –

+0

私は自分の答えを更新しました - それが助けてくれることを願って – DAXaholic

+0

あなたは上を行きました、もう一度ありがとう! –

関連する問題