دوست دارم بدونم چجوری میشه وقتی یه برنامه پایتون که خودم نوشتم، موقع اجرا کردنش توی ترمینال بهش ورودی بدم. انواع مختلف ورودی که با مثال میگم همشو.
## سوییچ های کوتاه و بلند که هردو یک کار رو انجام میدن و ورودی ندارن ##
python app.py -l *OR* python app.py --list
## سوویچ هایی که ورودی دارن ##
python app.py -s bike *OR* python app.py --show bike
## ورودی مستقیم (مثل جنگو) ##
python app.py randomize
python app.py play song.mp3
python manage.py runserver 8000
اگه یه روش خاص باشه که بشه همه این موارد رو باهاش پیاده کرد خیلی خوب میشه.
لیست sys.argv شامل چیزهایی هست که از طریق خط فرمان به برنامه داده شده. میتونید با خوندن اون، به این اطلاعات دست پیدا کنید. sys.orig_argv خود چیزهایی هست که از خط فرمان به برنامه داده شده، بدون اینکه اول، توسط خود پایتون پردازش بشه.
برای گرفتن آپشنها میتونید از ماژول getopt استفاده کنید. عملکرد اون شبیه تابع getopt توی libc هست. پس اگه با این تابع توی c کار کرده باشید، نباید کار با این ماژول توی پایتون، برای شما زیاد سخت باشه.
اینجا رو ببینید.
ماژول argparse هم هست. پیامهای خطای اون، نسبت به getopt بهتره.
## ورودی هایی که با علامت مساوی وارد میشن(مثل دستور dd ) ##
python app.py color=red shape=cube
dd bs=4M if=/path/to/input of=/path/to/output
فکر کنم این رو باید خودتون از طریق خوندن sys.argv مدیریت کنید.
ضمنا میخوام جوری باشه که توی ترمینال autocomplete بتونه سوییچ ها و گزینه هارو تشخیص بده.
باید برای برنامهتون، اسکریپت completion ایجاد کنید تا bash از اون استفاده کنه. اسکریپت completion، یه اسکریپت به زبان bash هست. دستور complete مرتبط هست.
بزرگواران ، منم همین روزا میخواستم دقیقا همین سوالا رو بپرسم درباره اسکریپت های بش ! ممنون میشم در کنار پرسش های این دوستمون مال بش رو هم ذکر کنین که الکی یه تاپیک دیگه نزنم ، اگر هم فک میکنید اونجوری درست تره که چشم !
( البته من برای بش ، سوییچ تک حرفی رو بلدم )
چیزهایی که از طریق خط فرمان داده شده رو که میدونید چجوری بگیرید.
از دستورات getopt و getopts برای پردازش آرگومانها استفاده کنید. getopts داخل خود bash هست. getopt یه دستور خارجیه و قابلیتهای بیشتری نسبت به getopts داره. از تابع getopt که همراه libc هست برای اینکار استفاده میکنه.