python - 在另一个 python 文件中运行一个 python 文件(没有类和函数)
问题描述
我有一个简单的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
从我的第二个文件中访问 in 的值。我阅读了大多数人建议使用带函数的类的其他解决方案,但我在第一个文件中有数百行变量(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 *
,但是事情很快就会变得非常混乱。
推荐阅读
- java - Spring SimpleJdbcCall 和 Beanpropertyrowmapper
- mysql - 如何在 SQL 上获取下一个付款日期
- spring - 扩展 Spring 安全用户类
- visual-studio-2019 - 我无法签署 bin\Debug\Mainpaint.exe
- ios - UICollectionView 的宽度在 UITableViewCell 内没有改变
- python - 使用 Python 和 Gmail API 将电子邮件标记为已读
- twitter-bootstrap - Bootstrap 3 虚线进度条
- python - 将“24OCT2020:00:00:00”格式转换为日期时间
- word-embedding - 如何在词嵌入模型 BERT 上使用我自己的语料库
- spring-boot - 如何检测 RSocket 连接是否成功?