2016-12-24 9 views
2

私は、Pythonサブプロセスモジュールからsshfsを呼び出すディレクトリをマウントしてからアンマウントすることができます。これを達成するために使用しているコードは次のとおりです。sshfsとPython Subprocessを使用してフォルダをマウントおよびマウント解除する方法は?

import subprocess 
mkdir_command = 'mkdir {}'.format(local_data_directory) 
unmount_command = 'umount {}'.format(local_data_directory) 
mount_command = 'sshfs -o allow_other -o IdentityFile={} {}@{}:{} {}'.format(
    key_file, host_username, host_ip, host_data_directory, local_data_directory) 
subprocess.call(mkdir_command, shell=True) 
subprocess.call(mount_command, shell=True) 
subprocess.call(unmount_command, shell=True) 

ます。mkdirおよびマウントコマンドが成功しているが、私はディレクトリをアンマウントしようとすると、エラーアンマウントに失敗し得る:操作は許可されていません。これは、サブプロセスユーザーにlocal_data_directoryの親フォルダに対する書き込み権限がないためです。 local_data_directoryのパーミッションをチェックすると、所有者はユーザー#1004と言います。これはPythonのサブプロセスのデフォルトユーザーですか?私はちょうどそのユーザーにすべての親ディレクトリのアクセス権を与えることができると思うが、私は私のホームフォルダ全体に対してサブプロセス書き込み能力を与えたくない。これをしないとこれを解決する方法はありますか?

+0

のfusermountを使用することですか? Debianのようなシステムでは、 'fuse'グループに所属する必要があります。 –

+0

@hiro主人公いいえ、私はそれもできません。 – mdornfe1

+0

それはPythonの問題ではありません。あなたはPythonに目を向ける前にそれを実行する必要があります。 Googleの 'sshfs fuse'とあなたのLinuxディストリビューションの名前とバージョンの組み合わせ。ところで、Pythonのサブプロセスのデフォルトユーザーはありません。あなたのプログラムを実行しているPythonインタプリタを実行するユーザがプロセスを所有します。これは通常あなたのユーザ 'id'です。 –

答えて

1

は解決策が判明(すなわち、正常まったく同じコマンドを実行する)あなたは、コマンドライン上のディレクトリをマウントすることができます代わりにマウント

import subprocess 
mkdir_command = 'mkdir {}'.format(local_data_directory) 
unmount_command = 'fuserumount {}'.format(local_data_directory) 
mount_command = 'sshfs -o allow_other -o IdentityFile={} {}@{}:{} {}'.format(
    key_file, host_username, host_ip, host_data_directory, local_data_directory) 
subprocess.call(mkdir_command, shell=True) 
subprocess.call(mount_command, shell=True) 
subprocess.call(unmount_command, shell=True) 
+0

あなたの '/ etc/fstab'の' umount'に正しいエントリが与えられていれば、それはうまくいくでしょう... –

関連する問題