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

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

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


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

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

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

آفلاین mr.amir138396

  • Sr. Member
  • *
  • ارسال: 459
  • جنسیت : پسر
  • شاگرد همیشه مشتاق یادگیری
 
 سلام به همگی
 
 من یه مشکلی دارم اون هم اینه که چجوری یک ماژول پیتون رو در دل یکی دیگه اجرا کنم یعنی به محض اینکه مثلا عدد  1 وارد شد همونجا یک ماژول دیگه رو اجرا کنه در دل خودش یا هم اینکه حداقل یک صفحه ترمینال دیگه باز کنه اگه امکانش هست کد رو بنویسین ممنون
« آخرین ویرایش: 23 مهر 1399، 09:07 ب‌ظ توسط mr.amir138396 »
با احترام ! امیرحسین عباسی فاروجی . (;

آفلاین مرتضی . م

  • High Hero Member
  • *
  • ارسال: 1121
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #1 : 23 مهر 1399، 05:43 ب‌ظ »
من کامل متوجه منظورتون نشدم
فکر کنم جای اسکریپت و ماژول رو برعکس نوشتید
منظورتون اینه مثلا اگه کاربر ۱ رو وارد کرد بره یه برنامه دیگه رو اجرا بکنه؟
۲ تا ره به ذهنم میرسه که جفتشون هم تست کردم
اول اینکه اون برنامه ای که میخواید صدا زده بشه توی یه تابع اصلی (مثل main توی C) باشه و اول برنامه دوم بیاید اون رو import کنید و تابعش رو هرجا خواستید صدا بزنید
راه دوم اینه که اول برنامه ماژول os رو ایمپورت بکنید و برای صدازدن برنامه دوم(اگه جفتشون توی یه دایرکتوری باشند) ابن خط رو بنویسید os.system('python3 '+'NAME_OF_OTHER_SCRIPT')
من خودم با دومی حال می کنم ولی هرکدوم یه سری مزایا و معایب داره

آفلاین mr.amir138396

  • Sr. Member
  • *
  • ارسال: 459
  • جنسیت : پسر
  • شاگرد همیشه مشتاق یادگیری
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #2 : 23 مهر 1399، 06:16 ب‌ظ »
 
 ممنون خدا خیرت بده دستت طلا فقط اگه توی یک دایرکتوری نبودن چی کار کنم در مورد راه اول هم کمی توضیح میدی ؟ به همراه مثال ممنون
« آخرین ویرایش: 23 مهر 1399، 09:09 ب‌ظ توسط mr.amir138396 »
با احترام ! امیرحسین عباسی فاروجی . (;

آفلاین مرتضی . م

  • High Hero Member
  • *
  • ارسال: 1121
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #3 : 23 مهر 1399، 10:46 ب‌ظ »
اگه توی یه دایرکتوری نبودند برای لینوکس باید ببه جای مسیر نسبی مسیر مطلق رو بدید مثلا
os.system('python3 /home/USER/Desktop/b.py')برای دومی هم مثلا برنامه اول اینه (به اسم first_program.py(
""" It is the first program that we not run it directly """
import math
def is_prime(n):
    """ Check if a numer is prime or not """
    for i in range(2, int(math.sqrt(n))+1):
        if n%i==0:
            return False
    return True
def main():
    """ The main function  """
    n=int(input('Please give me a number'))
    if is_prime(n):
        print(n, 'is prime number')
        return 0
    else:
        print(n, 'is not prime number')
        return n

و برنامه ای که خودمون صدا میزنیم اینه
""" This is the second program that we run it directly """
import math
import first_program
def prime_factors(n):
    i=2
    prime_numbers=[]
    power_of_primes=[]
    while i<=n:
        if n%i==0:
            prime_numbers.append(i)
            power_of_primes.append(0)
            while n%i==0:
                power_of_primes[-1]+=1
                n=n//i
        i+=1
    return [prime_numbers, power_of_primes]
n=first_program.main()
if n:
    [prime, power]=prime_factors(n)
    for i in range(len(prime)-1):
        print(prime[i], '^', power[i], end=' * ')
    print(prime[-1], '^', power[-1])

آفلاین mr.amir138396

  • Sr. Member
  • *
  • ارسال: 459
  • جنسیت : پسر
  • شاگرد همیشه مشتاق یادگیری
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #4 : 24 مهر 1399، 02:32 ب‌ظ »
 
 ممنون تازه اگه به جای python3  رو gedit وارد کنی text editor باز میشه و می تونی ادیت کنی  ;D ;D ;D ;D ;D ;D ;D :)
با احترام ! امیرحسین عباسی فاروجی . (;

آفلاین مرتضی . م

  • High Hero Member
  • *
  • ارسال: 1121
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #5 : 24 مهر 1399، 04:06 ب‌ظ »
آره دیگه  ;)
os.system در واقع برای دستور دادن به سیستم عامل هست. حالا توی لینوکس بش هست مثلا اگه توی ویندوز بزنیم os.system('explorer.exe') میاد یه file explorer بازی میکنه
« آخرین ویرایش: 27 مهر 1399، 09:48 ب‌ظ توسط مرتضی . م »

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

  • ناظر انجمن
  • *
  • ارسال: 19724
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #6 : 27 مهر 1399، 04:05 ب‌ظ »
سعی کنید تا جای ممکن از os استفاده نکنید، چون هم عملکرد برنامه رو پایین می‌آره و هم به سیستم‌عامل وابسته‌است.

در این حالت، باید کد دوم رو تبدیل به یک ماژول جدا یا حتا یک بستهٔ جدا کنی و توی کد نخست، درون‌ریزیش کنی.
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن

آفلاین mr.amir138396

  • Sr. Member
  • *
  • ارسال: 459
  • جنسیت : پسر
  • شاگرد همیشه مشتاق یادگیری
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #7 : 28 مهر 1399، 01:05 ب‌ظ »
سعی کنید تا جای ممکن از os استفاده نکنید، چون هم عملکرد برنامه رو پایین می‌آره و هم به سیستم‌عامل وابسته‌است.

در این حالت، باید کد دوم رو تبدیل به یک ماژول جدا یا حتا یک بستهٔ جدا کنی و توی کد نخست، درون‌ریزیش کنی.

 
 ممنون
با احترام ! امیرحسین عباسی فاروجی . (;

آفلاین mr.amir138396

  • Sr. Member
  • *
  • ارسال: 459
  • جنسیت : پسر
  • شاگرد همیشه مشتاق یادگیری
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #8 : 22 آبان 1399، 02:43 ب‌ظ »
آره دیگه  ;)
os.system در واقع برای دستور دادن به سیستم عامل هست. حالا توی لینوکس بش هست مثلا اگه توی ویندوز بزنیم os.system('explorer.exe') میاد یه file explorer بازی میکنه

 
 اگرچه بالا آوردن تاپیک قدیمی بده ولی  چجوری میشه که با os.system که نرم افزار باز میشه (مثلا eog در اوبونتو ) دیگه نرم افزار باز شده به ترمینال وابسته نباشه چون وقتی می زنی os.system('eog ','1.jpg') تا اون رو نبندی ترمینال کار نمیکنه
با احترام ! امیرحسین عباسی فاروجی . (;

آفلاین مرتضی . م

  • High Hero Member
  • *
  • ارسال: 1121
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #9 : 22 آبان 1399، 08:03 ب‌ظ »
دو تا راه فکر کنم باشه
راه اول که خودم استفاده اش نمی کنم اینه که از multithread استفاده کنید
راه دوم هم ربطی به پایتون نداره اینکه همونطور که اگه توی بش یه & بزاری ته دستور دستور توی bg اجرا میشه میتونید همین کار رو توی اون دستوری که به os میدید انجام بدید

آفلاین mr.amir138396

  • Sr. Member
  • *
  • ارسال: 459
  • جنسیت : پسر
  • شاگرد همیشه مشتاق یادگیری
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #10 : 23 آبان 1399، 11:47 ق‌ظ »
دو تا راه فکر کنم باشه
راه اول که خودم استفاده اش نمی کنم اینه که از multithread استفاده کنید
راه دوم هم ربطی به پایتون نداره اینکه همونطور که اگه توی بش یه & بزاری ته دستور دستور توی bg اجرا میشه میتونید همین کار رو توی اون دستوری که به os میدید انجام بدید

 
 نفهمیدم با مثال میگید ممنون
با احترام ! امیرحسین عباسی فاروجی . (;

آفلاین مرتضی . م

  • High Hero Member
  • *
  • ارسال: 1121
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #11 : 24 آبان 1399، 05:41 ق‌ظ »
برای راه دوم توضیح میدم چون بحث multithread یه مقدار پیچیده است و خودم هم استفاده نکردم برای راه دوم هم توی همون مثال قبل به جای
os.system('python3 b.py')بنویسید
os.system('python3 b.py &')ولی خب اگه از درون ریزی ماژول اول در دومی استفاده میکنید فکر کنم تنها راه استفاده از multithreading باشه

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

  • ناظر انجمن
  • *
  • ارسال: 19724
  • جنسیت : پسر
  • Urahara Kiesuke
    • وبلاگ
پاسخ : لینک یک ماژول پایتون به ماژولی دیگر
« پاسخ #12 : 28 آبان 1399، 01:51 ب‌ظ »
اگرچه بالا آوردن تاپیک قدیمی بده ولی  چجوری میشه که با os.system که نرم افزار باز میشه (مثلا eog در اوبونتو ) دیگه نرم افزار باز شده به ترمینال وابسته نباشه چون وقتی می زنی os.system('eog ','1.jpg') تا اون رو نبندی ترمینال کار نمیکنه
باید از فراخوانی non-blocker استفاده کنی. این‌جا یه نمونه‌اش رو نوشتم:
https://framagit.org/tractor/carburetor/-/blob/master/carburetor#L105
اگه این ارسال بهت کمک کرد، دنبال دکمهٔ تشکر نگرد. به جاش تو هم به جامعهٔ آزادت کمک کن