2016-07-30 2 views
1

Я пытаюсь передать информацию между двумя разными скриптами python. Они довольно долго, так что в целях упрощения, здесь две другие сценарии, где я встречаю тот же вопрос:Как передать переменные между двумя разными скриптами python У меня есть

a.py

f = open('test.txt', 'w+') 
num = int(raw_input('How many are there: ')) 
tipe = raw_input('What kind are they: ') 

if __name__ == '__main__': 
    from b import fxn 

    for x in xrange(num, num+11): 
     fxn() 
     num = x 

    f.close() 

b.py

from a import num, tipe 

def fxn(): 
    print num, tipe 
    f.writelines(str(num)+', '+tipe) 

Я спросил для num и tipe дважды, то записи со второго раза печатаются 11 раз.

Как это сделать, чтобы переменные/файлы в a.py передавались на b.py, редактировались/обрабатывались/обрабатывались в b.py, а затем возвращались/закрывались в a.py?

Кроме того, почему я попросил NUM и дважды Отметить Тип, то код под если «главный» имя ==: запускается?

+0

Функция может принимать параметры. Причина, по которой вас дважды запрашивают, - это операции ввода-вывода в глобальной области и будут выполняться каждый раз при импорте. – mljli

ответ

0

При передаче переменных между скриптами Python помните, что при вызове сценария вызывающий скрипт может получить доступ к пространству имен вызываемого скрипта.

Это, как говорится, вы могли бы дать этому попытку: Запустить называемый скрипт с кодом

from __main__ import * 

Это предоставляет доступ к пространству имен (переменные и функции) сценария вызывающего абонента. Поскольку на самом деле это не файлы, с которыми вы будете манипулировать, как вы сказали ранее, я оставлю это вам, чтобы применить это к реальным файлам, надеюсь, что это поможет.

0

вы можете передать их через функции

a.py

f = open('test.txt', 'w+') 
num = int(raw_input('How many are there: ')) 
tipe = raw_input('What kind are they: ') 

if __name__ == '__main__': 
    from b import fxn 

    for x in xrange(num, num+11): 
     fxn(num, tipe, f) # Pass parameters num, tipe and file handle 
     num = x 

    f.close() 

b.py

# from a import num, tipe --> **This is not required** 

# receive inputs 
def fxn(num, tipe, f): 
    print num, tipe 
    f.writelines(str(num)+', '+tipe) 

Выполнение a.py приведет к

3 fruits 
3 fruits 
4 fruits 
5 fruits 
6 fruits 
7 fruits 
8 fruits 
9 fruits 
10 fruits 
11 fruits 
12 fruits 

3 плода печатаются дважды, потому что вы вызываете функцию сначала, а затем увеличиваете число (путем повторного присвоения). Вместо этого, вы можете иметь свой a.py, как показано ниже, чтобы иметь 3 плодов напечатанных только один раз:

f = open('test.txt', 'w+') 
num = int(raw_input('How many are there: ')) 
tipe = raw_input('What kind are they: ') 

if __name__ == '__main__': 
    from b import fxn 

    for x in xrange(num, num+11): 
     fxn(x, tipe, f) # Pass parameters num, tipe and file handle 

    f.close() 
Смежные вопросы