2016-12-24 2 views
2

Я хочу, чтобы смонтировать, а затем размонтировать каталог, вызывающий sshfs из модуля подпроцесса Python. Вот код, который я использую для этого.Как монтировать и размонтировать папку с sshfs и подпроцессом Python?

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

вы можете смонтировать каталог в командной строке (т.е. выполнить ту же самую команду успешно)? на девианоподобных системах для этого вам необходимо принадлежать группе 'fuse'. –

+0

@hiro главный герой Нет, я тоже не могу. – mdornfe1

+0

, то это не проблема с python. вам нужно запустить этот запуск, прежде чем перейти к python. google 'sshfs fuse' в сочетании с именем и версией вашего дистрибутива Linux. Кстати, для подпроцесса python нет пользователя по умолчанию. процесс будет принадлежать пользователю, который запускает интерпретатор python, запускающий вашу программу. который обычно является вашим пользователем 'id'. –

ответ

1

Оказывается, решение использовать fusermount вместо монтировки

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' также будет работать ... –

 Смежные вопросы

  • Нет связанных вопросов^_^