3

これは単純な問題のように思えますが、私はそれを理解するのに苦労しています。

リモートサーバーに共有フォルダーを設定して、フォルダーがWindowsエクスプローラーに次のように表示されるようにしました:\\ server-name\shared-directory。そのフォルダーからリモートで読み取り、Windowsエクスプローラーを介してそのフォルダーにリモートで書き込むことができます。しかし、Pythonスクリプトを介してそのファイルにアクセスしようとすると、ディレクトリが存在しないと表示されます。

サーバーに対する管理者権限があり、共有ドライブへのアクセス権を自分に与えました(Windowsエクスプローラーを介してファイルをコピーすることでこれを確認しました)。

Pythonでは、次のようにドライブにアクセスしています(ただし、いくつかの異なる方法を試しましたが、成功しませんでした)。

os.access('\\\\server-name\\path-to-shared-directory', os.W_OK)

私が間違っているかもしれないことについて何か提案はありますか?

編集:

質問に答えて、私は実際にスクリプトを使用してファイルをコピーしようとしています。os.accessは、ディレクトリに書き込みアクセス権があるかどうかを確認するために使用されました。私が使用しているコピーコードは次のとおりです。

def copy_folder(src, dest):
    if not os.access(dest, os.W_OK):
        return(False)
    cmd = ['xcopy', '/E', '/J', '/Y', '/I', src, dest]

    p = subprocess.Popen(args=cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

    out, err = p.communicate()

    print 'out: %s' % out
    print 'err: %s' % err

    return(True)

copy_folder(my_source_directory, '\\\\server-name\\path-to-shared-directory')

これにより、「無効なドライブ仕様」がエラーとして返されます。

4

1 に答える 1

2

すでに使用しようとしているUNCパスを介してファイルにアクセスするのに問題はないはずですが、エスケープを支援するために少し異なる形式にすることをお勧めします。

src  = r'C:\path\to\source'
dest = r'\\server-name\path-to-shared-directory'

そして、あなたは必要ありませんstdin

p = subprocess.Popen(cmd, 
        stdout=subprocess.PIPE, 
        stderr=subprocess.PIPE, 
        shell=True)

通常、Pythonのパスにはスラッシュを使用できますが、シェルコマンドを呼び出すため、バックスラッシュが必要です。

于 2012-10-04T21:40:57.773 に答える