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)
Другие вопросы по тегам