فراخوانی دستورات شل از Python: OS.system vs Subprocess

عکس پروفایل نویسنده

@ماركوسدلكوتومارکوس دل کویتو

دکترای شیمی نظری. علاقه مند به یادگیری ماشین در کشف مواد استفاده می شود

اگر شما یک برنامه نویس پایتون هستید ، کاملاً محتمل است که شما در اسکریپت نویسی پوسته تجربه داشته باشید. رو به رو شدن با وظیفه ای که حل آن با دستور پوسته پیش پا افتاده به نظر می رسد غیر معمول نیست. بنابراین ، مفید است که با نحوه فراخوانی کارآمد این دستورات از طریق کد پایتون آشنا شوید و محدودیت های آنها را بدانید.

در این مقاله کوتاه ، من در مورد چگونگی استفاده از قدیمی تر بحث می کنم (اگرچه هنوز نسبتاً رایج است)

os.system

فرمان و جدیدتر

subprocess

فرمان دادن من برخی از خطرات ، محدودیت های احتمالی آنها را نشان می دهم و نمونه های کاملی از کاربرد آنها را ارائه می دهم.

دستورات خارجی ممکن است یک گزینه جذاب برای کارهای کوچک باشد اگر با آنها آشنا باشید و گزینه جایگزین پیتونیک به معنی زمان یادگیری / اجرای بیشتر باشد. با این حال ، عملکردهای پایتون در طولانی مدت در وقت و مشکلات شما صرفه جویی می کنند.

گزینه 1: OS.system (منسوخ شده) دستورات Shell

من در زیر یک مثال ساده را نشان می دهم

os.system

برای چاپ اولین خط از پرونده ارائه شده توسط کاربر ، با استفاده از

head -n 1

.

#!/usr/bin/env python3
import os
# Define command and options wanted
command = "head -n 1 "
# Ask user for file name(s) - SECURITY RISK: susceptible to shell injection
filename = input("Please introduce name of file of...