python3 不同 py 文件如何共享变量?

2019-08-02 10:21:30 +08:00
 qw30716

a.py 中有两个变量通过 sys.argv 传进来的,我想实现类似 java 那种直接使用 static 方法保存下来(就是 b.py 保存),然后 c.py 调用 b.py 保存的这两个变量,但是我试了使用 @classmethod 和 @staticmethod 都无法实现不同 py 文件共享变量,不知道是哪里的原因,请各位大佬支招

5843 次点击
所在节点    Python
31 条回复
oahebky
2019-08-02 12:01:14 +08:00
b.py.jinja2

```python
from functools import namedtuple

specific_var = namedtuple('specific_var', ('key1', 'key2'))

SPC_VAR = specific_var(key1='{{ value1 }}', key2='{{ value2 }}')

```



a.py

```python
import os, sys
from jinja2 import Template

if __name__ == "__main__":
value1 = sys.argv[1]
value2 = sys.argv[2]

with open('b.py.jinja2', 'r') as fp:
data = fp.read()

template = Template(data)
dst_data = template.render(value1=value1, value2=value2)
with open('b.py', 'w') as fp:
fp.write(dst_data)

```

```shell
➜ pip install jinja2
➜ Python python a.py foo bar
➜ Python ipython # c.py
Python 3.6.8 (... ... IPython 7.6.1 ... Type '?' for help.

In [1]: from b import SPC_VAR

In [2]: SPC_VAR.key1
Out[2]: 'foo'

In [3]: SPC_VAR.key2
Out[3]: 'bar'

In [4]:
```
oahebky
2019-08-02 12:02:54 +08:00
```
测试 V2EX support markdown
```
Trim21
2019-08-02 12:03:42 +08:00
不要用 from a import var 用 import a 然后使用 a.var 就好了
oahebky
2019-08-02 12:03:56 +08:00
好吧。上面代码文件有缩进。只能考楼主自己了。
oahebky
2019-08-02 12:07:27 +08:00
如果修改的时候,cDOTpy+bDOTpy` 相关进程正在运行。想要不关闭 /重启进程,那么进程间通信(与 aDOTpy )是必须的。
qw30716
2019-08-02 13:37:18 +08:00
早上一直回复不了,被 V2EX 禁言了
qw30716
2019-08-02 13:40:45 +08:00
@Huelse set get 不行,你再另一个 py 调用的话,get 到的值是默认值,不是 set 的值
qw30716
2019-08-02 13:40:56 +08:00
@oahebky 我试试看
zeroze
2019-08-02 15:27:25 +08:00
写入 config.ini,用 config 包处理
oahebky
2019-08-02 16:07:35 +08:00
@Trim21 #23 原文:“不要用 from a import var 用 import a 然后使用 a.var 就好了”
======
回复:这也是一个知识点。
楼主的这个问法太模糊(有一个需求实现不了,但是却问语言本身如何实现某某某 -- 可能这个实现的思路本身就是有问题的;应该抛开语言讲清楚需求是什么,然后后面可以加上做过的尝试)。所以大家只能按照自己对你的问题的理解来提供建议。

如果你的 aDOTpy 是一个命令行解析程序,bDOTpy 是保存解析过的数据,cDOTpy 中有个总函数(比如 `run`) 被 aDOTpy 在处理完了命令行数据之后调用,cDOTpy 会导入 bDOTpy,那么可以说应当使用 #23 的方式。
ptrees
2019-08-02 18:56:42 +08:00
我想了想,存取一个公用的数据,这不就是数据库的作用吗...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/588425

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX