2016-12-24 75 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和mount命令成功,但是当我尝试卸载目录时,出现错误umount failed:Operation not permitted。我猜这是因为子进程用户对local_data_directory的父文件夹没有写权限。当我检查local_data_directory的权限时,它说所有者是用户#1004。这是Python子进程的默认用户吗?我想我可以给这个用户写入所有父目录的权限,但我不想给我的整个主文件夹提供子进程写入能力。有没有办法解决这个问题呢?

+0

可以挂载目录的命令行(即成功地执行相同的指令)?在类似debian的系统上,您需要属于“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'中输入了正确的内容,它也可以工作。 –

相关问题