Запуск файла python внутри другого файла python (без классов и функций) - PullRequest
0 голосов
/ 16 января 2020

У меня есть простой python файл, p1.py, который имеет в основном это

#!/usr/bin/python
a=1
b=2
c=3
s1=a+b
s2=a+c
s3=b+c

Во втором моем файле, p2.py, я хочу получить доступ к значениям s1, s2 и s3. Я попытался после моего второго файла, но он не будет работать.

#!/usr/bin/python
import os
import os.path
import math
import sys
import subprocess

os.system('python p1.py')
print('the value of first variable is' + s1 + 'second is' +s2 + 'and third is' + s3)

Я также пытался использовать

proc = subprocess.Popen(['python', 'p1.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

, но я не могу получить доступ к значениям s1, s2 or s3 из моего второго файла. Я читал о других решениях, где большинство людей предлагали использовать класс с функциями, но у меня есть сотни строк переменных (a,b,c) и результаты (s1,s2, s3) et c в первом файле, поэтому чтение и выполнение напрямую показалось единственным вариантом.

Ответы [ 2 ]

4 голосов
/ 16 января 2020

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

При этом, чтобы достичь того, чего вы хотите достичь, вы можете просто сделать:

# In p2.py:
import p1

print("The value of s1 is" + p1.s1)

Оператор import загрузит файл p1 и выполнит все операторы уровня модуля в нем, а также сделает объявленные переменные доступными для вас. Если вы не хотите префиксировать все с p1., тогда вы можете сделать from p1 import *, но тогда все становится очень запутанным и очень быстрым.


0 голосов
/ 16 января 2020

Вы ничего не распечатали или записали вывод в каких-либо файлах? Тогда как вы можете получить к ним доступ? Без звонка ??

Попробуйте что-то вроде этого, если это то, что вы ищете ..

cmd = "python p1.py"

log = subprocess.Popen(cmd.split(' '),stdout=subprocess.PIPE, stderr=subprocess.PIPE)


stdout,stderr = log.communicate()

# FORMAT THE OUTPUT

stdout = stdout.decode('utf-8')
stderr = stderr.decode('utf-8')

s1,s2,s3 = list(stdout.split('\n'))

и ваш p1.py должен напечатать

#!/usr/bin/python 
a=1 
b=2 
c=3 
s1=a+b 
s2=a+c 
s3=b+c
print(s1)
print(s2)
print(s3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...