5

指定された文字 'R:\' に既にマップされているドライブがあります。ログオン中またはコンピューターのロックが解除されているときに、Python スクリプトを実行してこのスペースにアクセスすると、正常に動作します。この問題は、朝早く出勤前にスクリプトを実行するようにタスク スケジューラを設定したときに発生します。基本的にはログインしたままマシンをロックしますが、ある時点でネットワーク ドライブ マッピングがタイムアウトしたように見えます (ただし、ロックを解除すると再接続します)。朝のマシン)、これがスクリプトがそれらを見つけることができない理由です。

os.path.exists() を実行してこのドライブ上のフォルダーを確認し、まだ存在しない場合は作成しようとすると、エラーが発生します。「try/except」ループから、「システムは指定されたパスを見つけることができません: 'R:\'.

私の質問: Python を介して強制的に更新する方法はありますか? ネットワーク ドライブのマッピングに関する他の投稿を見たことがありますが、既にドライブがマッピングされているため、これが私のケースに当てはまるかどうかはわかりません。使用する文字は、異なるアプリケーションが絶対参照を持っているため、同じままである必要があります。同じドライブをマッピングすると問題が発生するか、機能しないかどうか疑問に思っていますが、スクリプトを使用して一時的に別の文字にマッピングし、完了したらマッピングを解除したくない...これを行うには非効率的な方法のように思えますか?

Python 2.6 を使用する (別のプログラムが必要とするもの)。

ありがとう、

4

2 に答える 2

1

最良の解決策は、UNC パス名、つまり形式のパスで「ドライブ」を参照することです\\hostname\sharenameが、残念ながら、Python のベース ライブラリは UNC パスを処理するためのサポートが非常に貧弱です。

オプション #1 は、UNC パスのサポートを強化するためにインストールできる Python 拡張モジュールを見つけることです。「python unc」でググってみてください。

オプション #2 は、Pythonサブプロセスモジュールを使用してnet useコマンドを実行し、結果の出力を解析することです。たとえば、DOS プロンプトから実行net useすると、次のように出力されます...

Status       Local     Remote                    Network
-------------------------------------------------------------------------------
OK           R:        \\hostname\sharename      Microsoft Windows Network

...これを使用して、ドライブが既にマップされているかどうかを確認できます。マップされていない場合は、実行net use R: \\hostname\sharenameしてマップすることができます。net use「タイムアウト」した場合、パラメーターなしで呼び出すだけで実際にはマッピングを「リフレッシュ」するのに十分である可能性がありますが、よくわかりません。

オプション #3 は、Python ctypesモジュールを使用して基礎となる Windows ライブラリを直接呼び出して、 を呼び出す機能をエミュレートすることを調査することnet useです。

于 2013-04-10T12:47:37.110 に答える
0

この問題に対する私の解決策は、参照されたマシンの IP アドレスを使用することでした。魅力的に機能し、マップされたドライブに問題はありません...応答に感謝します。

于 2013-04-19T12:06:09.910 に答える