我有一个简单的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)
等,因此直接读取和执行似乎是唯一的选择。
其他建议使用类和函数的人在较高层次上是正确的。一切都是关于良好的设计,使您的代码更易于阅读,使用,扩展和维护。
话虽如此,要实现您想要的目标,您可以做:
# In p2.py:
import p1
print("The value of s1 is" + p1.s1)
import
语句将加载p1
文件并在其中执行所有模块级语句,并使声明的变量可供您使用。如果您不想为所有内容加上p1.
作为前缀,则可以执行from p1 import *
,但是事情很快就会变得非常混乱。
您是否没有打印出任何内容或没有将输出写入任何文件?那你怎么能访问它们呢?没有电话吗?
如果您正在寻找的话,尝试这样的事情。
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)