Frage

Ich brauche ein Verzeichnis „dir“ auf einem Netzwerkgerät „Daten“ montieren mit Python auf einer Linux-Maschine

Ich weiß, dass ich den Befehl über die Befehlszeile senden kann:

mkdir ~/mnt/data_dir
mount -t data:/dir/ ~/mnt/data_dir

aber wie würde ich diese Befehle von einem Python-Skript senden?

War es hilfreich?

Lösung

Hier ist eine Möglichkeit:

import os

os.cmd ("mkdir ~/mnt/data_dir mount -t data:/dir/ /mnt/data_dir")

Sie können auch „popen“ verwenden, wenn Sie die Ausgabe des Befehls in Ihrem Skript lesen möchten.

HIH

... richie

Andere Tipps

Ich würde empfehlen Sie subprocess.checkcall verwenden.

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' ) ] )

Ich habe versucht, dies in einer chroot ohne proc montiert

/ # 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' ..........

Es soll möglich sein, das Gerät Datei zu ändern von „None“, um das Format der Halterung () Funktion erwartet für Netzwerkfreigaben. Ich glaube, es ist die gleiche wie die Mount-Befehl "host: / path / to / dir"

Beispiel des subprocess Modul mit:

import subprocess

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

oder

import subprocess

subprocess.Popen("mkdir ~/mnt/data_dir mount -t data:/dir/ /mnt/data_dir", shell=True)

Die zweite Version verwendet die Shell den Befehl auszuführen. Während besser lesbar und leichter in den meisten Situationen zu verwenden, sollte es vermieden werden, wenn der Benutzer vorgelegte Argumente zu übergeben wie die Injektion zu schälen führen könnte (das heißt die Ausführung anderer Befehle als mkdir in diesem Fall).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top