انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: پایتون، دریافت ورودی از کاربر در ترمینال  (دفعات بازدید: 468 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین EnriqueTTE

  • High Sr. Member
  • *
  • ارسال: 554
  • جنسیت : پسر
دوست دارم بدونم چجوری میشه وقتی یه برنامه پایتون که خودم نوشتم، موقع اجرا کردنش توی ترمینال بهش ورودی بدم. انواع مختلف ورودی که با مثال میگم همشو.

## سوییچ های کوتاه و بلند که هردو یک کار رو انجام میدن و ورودی ندارن ##
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
## ورودی هایی که با علامت مساوی وارد میشن(مثل دستور dd ) ##
python app.py color=red shape=cube
dd bs=4M if=/path/to/input of=/path/to/output

اگه یه روش خاص باشه که بشه همه این موارد رو باهاش پیاده کرد خیلی خوب میشه.
ضمنا میخوام جوری باشه که توی ترمینال autocomplete بتونه سوییچ ها و گزینه هارو تشخیص بده.
I am Enriquette

آفلاین سودو

  • High Hero Member
  • *
  • ارسال: 2704
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #1 : 26 اسفند 1400، 11:22 ب‌ظ »
بزرگواران ، منم همین روزا میخواستم دقیقا همین سوالا رو بپرسم درباره اسکریپت های بش ! ممنون میشم در کنار پرسش های این دوستمون مال بش رو هم ذکر کنین که الکی یه تاپیک دیگه نزنم ، اگر هم فک میکنید اونجوری درست تره که چشم !

( البته من برای بش ، سوییچ تک حرفی رو بلدم )
دبیان ناپایدار و گنوم!

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 4211
  • جنسیت : پسر
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #2 : 27 اسفند 1400، 12:41 ق‌ظ »
دوست دارم بدونم چجوری میشه وقتی یه برنامه پایتون که خودم نوشتم، موقع اجرا کردنش توی ترمینال بهش ورودی بدم. انواع مختلف ورودی که با مثال میگم همشو.

## سوییچ های کوتاه و بلند که هردو یک کار رو انجام میدن و ورودی ندارن ##
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 هست برای اینکار استفاده می‌کنه.
میدونید که زکات علم نشر آن است

آفلاین سودو

  • High Hero Member
  • *
  • ارسال: 2704
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #3 : 27 اسفند 1400، 01:33 ق‌ظ »
نقل‌قول
چیز‌هایی که از طریق خط فرمان داده شده رو که می‌دونید چجوری بگیرید.
بله ، البته در کل در حد دروه جناب امیر صمیمی میدونم و بس !

نقل‌قول
از تابع getopt که همراه libc هست برای اینکار استفاده می‌کنه
از تابع libc چیزی نمیدونم ، خیلی هم توی راهنمایی هاتون به دوستان دربارش گفتین که مثلا ( ممکنه مشکل از libc باشه ) یا ( جایگزینش glibc هست ) و فلان و فلان ! حالا سرچ میکنم دربارش !

خیلی ممنون 🌹
دبیان ناپایدار و گنوم!

آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 4211
  • جنسیت : پسر
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #4 : 27 اسفند 1400، 11:16 ق‌ظ »
libc تابع نیست. یه کتابخانه استاندارد c هست که از توابع اون، تقریبا توی همه برنامه‌ها استفاده میشه. برنامه‌ای به زبان c ندیدم که از توابع این کتابخانه استفاده نکنه.
فقط هم مربوط به یونیکس و سیستم‌های شبه یونیکس نیست. ویندوز هم libc خودش رو داره (در قالب dll ها هستند)

پیاده سازی‌های مختلفی از اون وجود داره مثلا gnulibc یا همون glibc که پیاده سازی گنو هست و توی بیشتر توزیع‌ها از این استفاده میشه.
musl هم هست. سبک‌تر و کوچک‌تره.
uClibc هم هست که برای اندروید استفاده میشه.

پیاده‌سازی‌ها دیگه‌ای هم هست که هر کدوم، توی جای خودش استفاده میشه.
فکر کنم تابع getopt فقط توی پیاده‌سازی glibc و شاید musl وجود داده. کامل مطمئن نیستم.
میدونید که زکات علم نشر آن است

آفلاین EnriqueTTE

  • High Sr. Member
  • *
  • ارسال: 554
  • جنسیت : پسر
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #5 : 27 اسفند 1400، 12:58 ب‌ظ »
باید برای برنامه‌تون، اسکریپت completion ایجاد کنید تا bash از اون استفاده کنه. اسکریپت completion، یه اسکریپت به زبان bash هست. دستور complete مرتبط هست.

میشه یه لینک بدید براش؟ من چیز بدرد بخوری پیدا نکردم.
I am Enriquette

آفلاین esmaeelE

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 971
  • جنسیت : پسر
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #6 : 28 اسفند 1400، 10:51 ق‌ظ »
پیشنهاد می‌کنم در پایتون از Click برای CLI استفاده کنید.


آفلاین دانیال بهزادی

  • ناظر انجمن
  • *
  • ارسال: 17321
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #7 : 28 اسفند 1400، 02:45 ب‌ظ »
بهتره از click یا fire برای این کار استفاده کنی.
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین esmaeelE

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 971
  • جنسیت : پسر
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #8 : 28 اسفند 1400، 04:39 ب‌ظ »
پیشنهاد می‌کنم در پایتون از Click برای CLI استفاده کنید.

همین را به همراه autocomplete آماده کردم.


آفلاین Dragon-

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 4211
  • جنسیت : پسر
پاسخ : پایتون، دریافت ورودی از کاربر در ترمینال
« پاسخ #9 : 28 اسفند 1400، 05:36 ب‌ظ »
میشه یه لینک بدید براش؟ من چیز بدرد بخوری پیدا نکردم.
بهتره اول اسکریپت نویسی با bash رو یاد بگیرید. زیاد هم سخت نیست.
در مورد conpletion، می‌تونید این رو ببینید.
https://opensource.com/article/18/3/creating-bash-completion-script
میدونید که زکات علم نشر آن است