كيفية تحميل دليل شبكة باستخدام بيثون؟
سؤال
أحتاج إلى تثبيت دليل "Dir" على آلة شبكة "بيانات" باستخدام Python على جهاز Linux
أعلم أنه يمكنني إرسال الأمر عبر سطر الأوامر:
mkdir ~/mnt/data_dir
mount -t data:/dir/ ~/mnt/data_dir
ولكن كيف أرسل تلك الأوامر من برنامج نصي بيثون؟
المحلول
هنا طريقة واحدة:
import os
os.cmd ("mkdir ~/mnt/data_dir mount -t data:/dir/ /mnt/data_dir")
يمكنك أيضا استخدام "Popen" إذا كنت ترغب في قراءة إخراج الأمر في البرنامج النصي الخاص بك.
HIH.
... ريتشي
نصائح أخرى
أود أن أوصي بك subprocess.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 دون شنت بروك
/ # 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 () تتوقع أسهم الشبكة. أعتقد أنه هو نفسه كمضيف جبل "المضيف: / المسار / إلى / دير"
مثال باستخدام subprocess
وحدة:
import subprocess
subprocess.Popen(["mkdir", "~/mnt/data_dir", "mount", "-t", "data:/dir/", "/mnt/data_dir"])
أو
import subprocess
subprocess.Popen("mkdir ~/mnt/data_dir mount -t data:/dir/ /mnt/data_dir", shell=True)
يستخدم الإصدار الثاني Shell لتنفيذ الأمر. في حين أن أكثر قابلية للقراءة وسهولة الاستخدام في معظم الحالات، يجب تجنبها عند تمرير الوسائط المقدمة للمستخدم لأن تلك قد تؤدي إلى حقن شل (أي تنفيذ أوامر أخرى من mkdir في هذه الحالة).