6

リモート Linux サーバー上のファイルを移動およびコピーできる Python スクリプトを作成しようとしています。ただし、(Windows 上で) スクリプトを実行している全員がこのサーバーを同じ文字にマップしているとは限りません。ユーザーに正しい文字を要求するのではなく、ドライブ文字がマップされているネットワーク URL でサーバーにアクセスしたいだけです。たとえば、サーバーの URL をマッピングした場合

\\name-of-machine.site.company.com

ドライブ S:\ にするには、たとえば、ドライブ文字に依存しない方法でファイル S:\var\SomeFile.txt にアクセスしたいと考えています。私は周りを見回しましたが、一般的な推奨事項はUNC表記を使用することです。

f = open(r"\\name-of-machine.site.company.com\var\SomeFile.txt", "w")

しかし、これを試してみると、そのようなファイルやディレクトリがないことを示す IOError が表示されます。代わりにサーバーの IP アドレスを使用しようとすると (実際のアドレスではなく、似ています):

f = open(r"\\10.1.123.149\var\SomeFile.txt", "w")

長い休止の後、IO エラーが表示されます:「モード ('w') またはファイル名が無効です」。これらの表記が機能しないのはなぜですか? また、このサーバーに (理想的にはローカル ドライブのように) URL でアクセスするにはどうすればよいですか?

4

4 に答える 4

6

簡単な解決策は、スラッシュを使用して Universal Name Convention (UNC) を指定することです。

//HOST/share/path/to/file

別のスレッドでこのソリューションを見つけ、ここで関連性があると感じました。以下の元のスレッドを参照してください。

Python を使用して、Windows ネットワーク上の共有フォルダーにアクセスするにはどうすればよいですか?

于 2014-06-16T21:48:43.940 に答える
5

非常に洗練された解決策ではありませんが、すべてのドライブを試すことはできますか?

ここから:

import win32api

drives = win32api.GetLogicalDriveStrings()
drives = drives.split('\000')[:-1]
print drives

次にos.path.exists()、適切なドライブが見つかるまで、すべての drive:\var\SomeFile.txt で使用できます。

于 2012-10-04T15:54:53.457 に答える
0

完全修飾名の代わりに短い名前を使用してみてください。あなたの例では、それは\\name-of-machine\var\SomeFile.txt.

編集:

さて、私はダミーのように感じます-うまくいけば、あなたは私と一体のように感じるでしょう! ;)

マシン名はname-of-machine.site.company.com、フォルダとファイル名は\var\SomeFile.txt-- 共有名は? つまり、パスは次のようになります。

\\name-of-machine.site.company.com\share_name\var\SomeFile.txt
于 2012-10-04T14:58:43.110 に答える
0

このタスク用にドライブ文字を予約でき、権限がある場合は、Python から「net use ...」を実行し、その固定ドライブ文字を使用してファイルの読み取り/書き込みを行うことができます。

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/net_use.mspx?mfr=true

于 2012-10-04T15:01:55.620 に答える