Python: доступ к переменным из сценария подпроцесса (дочернего) в родительском сценарии
Используя Python 2.7, у меня есть основной скрипт, который выполняет скрипт подпроцесса. Мой вопрос заключается в том, как мне получить определенные переменные из подпроцесса, например, векторы:
vec_1, vec_2, vec_3
Я знаю, что можно получить stdout
из скрипта в качестве матрицы символов с использованием subprocess.communicate()
Однако это не соответствует моей предполагаемой цели. Вот что я пробовал до сих пор.
Родительский скрипт:
import subprocess
if __name__ == "__main__":
process = subprocess.Popen(["abaqus", "python", "childscript.py", \
"file"], shell=True, stdout=subprocess.PIPE)
process.wait()
pr = process.communicate()
Детский подпроцесс:
def function(a):
return vec_1, vec_2, vec_3
if __name__ == '__main__':
function()
Бонусные отметки, если у кого-то есть идея, как выполнить подпроцесс без использования shell=True. Кажется, это возможно только с оболочкой, поскольку она включает в себя выполнение файла.bat.
РЕДАКТИРОВАТЬ
Чтобы уточнить, почему я не импортирую функцию напрямую в основной скрипт:
Программа, выполняемая в подпроцессе Abaqus, имеет свой собственный интерфейс Python и позволяет использовать скрипт Python для доступа к своим выводам данных. Следовательно, скрипт python должен запускаться через программу и не может быть интегрирован в основной.
2 ответа
Для вашего интереса то, что я хотел сделать, невозможно. Если бы это был просто случай выполнения дочернего сценария, тогда Anentropic был бы прав - многопроцессорный модуль - лучший путь.
Поскольку мой вопрос касался сторонней программы, которая имеет интерфейс Python, к сожалению, это невозможно.
Ссылка: https://www.researchgate.net/post/How_can_I_access_the_ABAQUS_python_API_from_outside_ABAQUS_cae
Грязный метод, который может работать для передачи отдельных значений.......
import subprocess
if __name__ == "__main__":
process = subprocess.Popen(["abaqus", "python", "child.py", \
"file"], shell=True, stdout=subprocess.PIPE)
process.wait()
x= process.stdout.read()
exec(x)
print vec_1
print vec_2
Child.py:
def function(a):
vec_1=a*2
vec_2=a*3
print("vec_1=" + str(vec_1))
print("vec_2=" + str(vec_2))
if __name__ == '__main__':
num=4
function(num)