2013-07-11 3 views
5

У меня есть скрипт python, который определяет шаг для проведения эксперимента definition.py и еще один скрипт python, который выполняет эксперимент execute.py. Первый файл, который я хочу представить в качестве данных более, чем код; когда эксперимент выполняется, для него создается папка, definition.py перемещается в папку, и любые данные, полученные из эксперимента, также сохраняются там.Лучший способ вернуть данные из одного файла python в другой

Я намерен позвонить execute.py как

execute.py -f save_stuff_here -d this_is_the_definition.py 

, но я не уверен, что лучший способ сделать это. Другие вопросы о stackoverflow предложили импортировать определение, но я не думаю, что это сработает для меня. У меня нет уверенности, что определение находится где-то в PYTHONPATH, и что определение имеет то же имя. Я бы предпочел, чтобы это не было, поскольку пользователь должен предоставлять эту информацию.

definition.py должен определить один объект (список действий), а execute.py должен иметь возможность обратиться к объекту.

Идеальное поведение, я хотел бы, что script1.py path/to/script2.py возвращает значение из script2.py в script1.py, где path/to/script2.py является любой произвольный файл.

Можно ли это сделать?

+0

Добро пожаловать в StackOverflow. Просто дружеское примечание относительно вашего вопроса, вы можете отформатировать встроенные фрагменты кода, используя обратные ссылки и форматировать блоки кода, отступывая четыре пробела. Это помогает каждому понять вопрос немного легче. – fontno

ответ

2

execfile файл с явным указанием globals dict. Вы можете получить все, что определено в файле, прочитав globals dict. Если вам нужна совместимость с Python 3, вы можете указать open файл, read и exec.

0

с помощью os и sys вы можете получить аргументы командной строки программы питона и использовать их, чтобы выполнить другую Python программу

import sys 
import os 
filename = sys.argv[1] 
os.system(filename) 

Это займет первое CLI в качестве ввода имени файла и назвать его, например, :

script1.py script2.py 

сделает script1 вызов Скрипт2

1

ли вам нужно отправить данные из пути/к/script2.py в сумы t1.py после завершения запуска script2.py? Вы попробовали ..?

script2.py

import os 
data = "whatever" 
os.system("python ..//..//script1.py %s" % data) 

script1.py

import sys 
data = sys.argv[1] 
print "my data is: " + data 
raw_input('enter to finish')