Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python挂载网络目录?_Python_Linux_Scripting_Mount - Fatal编程技术网

如何使用python挂载网络目录?

如何使用python挂载网络目录?,python,linux,scripting,mount,Python,Linux,Scripting,Mount,我需要在linux机器上使用python在网络机器“data”上挂载目录“dir” 我知道我可以通过命令行发送命令: mkdir ~/mnt/data_dir mount -t data:/dir/ ~/mnt/data_dir 但是如何从python脚本发送这些命令呢?这里有一种方法: import os os.cmd ("mkdir ~/mnt/data_dir mount -t data:/dir/ /mnt/data_dir") 如果要在脚本中读取命令的输出,也可以使用“popen

我需要在linux机器上使用python在网络机器“data”上挂载目录“dir”

我知道我可以通过命令行发送命令:

mkdir ~/mnt/data_dir
mount -t data:/dir/ ~/mnt/data_dir
但是如何从python脚本发送这些命令呢?

这里有一种方法:

import os

os.cmd ("mkdir ~/mnt/data_dir mount -t data:/dir/ /mnt/data_dir")
如果要在脚本中读取命令的输出,也可以使用“popen”


…richie使用
子流程
模块的示例:

import subprocess

subprocess.Popen(["mkdir", "~/mnt/data_dir", "mount", "-t", "data:/dir/", "/mnt/data_dir"])


第二个版本使用shell来执行命令。虽然在大多数情况下更易于阅读和使用,但在传递用户提交的参数时应避免使用它,因为这些参数可能会导致shell注入(即在本例中执行mkdir以外的其他命令)。

我建议您使用
子流程。checkcall

from subprocess import *

#most simply
check_call( 'mkdir ~/mnt/data_dir', shell=True )
check_call( 'mount -t whatever data:/dir/ ~/mnt/data_dir', shell=True )


#more securely
from os.path import expanduser
check_call( [ 'mkdir', expanduser( '~/mnt/data_dir' ) ] )
check_call( [ 'mount', '-t', 'whatever', 'data:/dir/', expanduser( '~/mnt/data_dir' ) ] )

我在chroot中尝试了这个,没有安装proc

/ # python
Python 2.7.1 (r271:86832, Feb 26 2011, 00:09:03) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> from ctypes import *
>>> libc = cdll.LoadLibrary("libc.so.0")
>>> os.listdir("/proc")
[]
>>> libc.mount(None, "/proc", "proc", 0, None)
0
>>> os.listdir("/proc")
['vmnet', 'asound', 'sysrq-trigger', 'partitions', 'diskstats', 'crypto', 'key-users', 'version_signature', 'kpageflags', 'kpagecount', 'kmsg', 'kcore', 'softirqs', 'version', 'uptime', 'stat', 'meminfo', 'loadavg', 'interrupts', 'devices', 'cpuinfo', 'cmdline', 'locks', 'filesystems', 'slabinfo', 'swaps', 'vmallocinfo', 'zoneinfo', 'vmstat', 'pagetypeinfo', 'buddyinfo', 'latency_stats', 'kallsyms', 'modules', 'dma', 'timer_stats', 'timer_list', 'iomem', 'ioports', 'execdomains', 'schedstat', 'sched_debug', 'mdstat', 'scsi', 'misc', 'acpi', 'fb', 'mtrr', 'irq', 'cgroups', 'sys', 'bus', 'tty', 'driver', 'fs', 'sysvipc', 'net', 'mounts', 'self', '1', '2', '3', '4', '5', '6', '7', '8' ..........

您应该能够将设备文件从“无”更改为mount()函数期望的网络共享格式。我相信这和mount命令“host:/path/to/dir”是一样的。

replicate:问题不一样,但答案是一样的。老问题,但为了将来的冒险。看看。更好的例子是使用
subprocess.Popen
。最好的例子是使用
subprocess.check\u call
。我不相信你的第一个例子会起作用。子进程不会展开
~
。当
shell=True
时,它将展开,这就是第二个示例工作的原因。
/ # python
Python 2.7.1 (r271:86832, Feb 26 2011, 00:09:03) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> from ctypes import *
>>> libc = cdll.LoadLibrary("libc.so.0")
>>> os.listdir("/proc")
[]
>>> libc.mount(None, "/proc", "proc", 0, None)
0
>>> os.listdir("/proc")
['vmnet', 'asound', 'sysrq-trigger', 'partitions', 'diskstats', 'crypto', 'key-users', 'version_signature', 'kpageflags', 'kpagecount', 'kmsg', 'kcore', 'softirqs', 'version', 'uptime', 'stat', 'meminfo', 'loadavg', 'interrupts', 'devices', 'cpuinfo', 'cmdline', 'locks', 'filesystems', 'slabinfo', 'swaps', 'vmallocinfo', 'zoneinfo', 'vmstat', 'pagetypeinfo', 'buddyinfo', 'latency_stats', 'kallsyms', 'modules', 'dma', 'timer_stats', 'timer_list', 'iomem', 'ioports', 'execdomains', 'schedstat', 'sched_debug', 'mdstat', 'scsi', 'misc', 'acpi', 'fb', 'mtrr', 'irq', 'cgroups', 'sys', 'bus', 'tty', 'driver', 'fs', 'sysvipc', 'net', 'mounts', 'self', '1', '2', '3', '4', '5', '6', '7', '8' ..........