سؤال

أحتاج إلى تثبيت دليل "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 في هذه الحالة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top