在另一个python文件内运行python文件(没有类和函数)

问题描述 投票:0回答:2

我有一个简单的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)等,因此直接读取和执行似乎是唯一的选择。

python subprocess
2个回答
4
投票

其他建议使用类和函数的人在较高层次上是正确的。一切都是关于良好的设计,使您的代码更易于阅读,使用,扩展和维护。

话虽如此,要实现您想要的目标,您可以做:

# In p2.py:
import p1

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

import语句将加载p1文件并在其中执行所有模块级语句,并使声明的变量可供您使用。如果您不想为所有内容加上p1.作为前缀,则可以执行from p1 import *,但是事情很快就会变得非常混乱。



0
投票

您是否没有打印出任何内容或没有将输出写入任何文件?那你怎么能访问它们呢?没有电话吗?

如果您正在寻找的话,尝试这样的事情。

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)
© www.soinside.com 2019 - 2024. All rights reserved.