1
arrow8899 2019-08-02 10:25:02 +08:00
|
3
leishi1313 2019-08-02 10:31:48 +08:00 via Android
@qw30716 那你为什么不直接 c 调 a ?我觉得你还是来个实际点的例子吧
|
4
leishi1313 2019-08-02 10:35:39 +08:00 via Android
要不你还是考虑来一个 config.py ,b 和 c 都直接读别从 arg 读了
|
5
qw30716 OP @leishi1313 肯定是需要从 arg 读的,因为这个值一直变
|
6
qw30716 OP @leishi1313 我本身以为 python 有类似 java 的 static 保存,但是搜索了一下,好像没有发现
|
7
andylsr 2019-08-02 10:43:29 +08:00 via Android
multiprocessing.queue
|
8
leishi1313 2019-08-02 10:44:18 +08:00 via Android
@qw30716 python 没 vm 能 static 到哪呢。这样子的话考虑 pickle 持久化到文件?
|
10
qw30716 OP @leishi1313 每次先写到文件,然后从文件读?这个作为最后考虑
|
11
ranleng 2019-08-02 10:48:06 +08:00
|
12
co3site 2019-08-02 10:50:17 +08:00 via Android
完全没看懂你的这公有变量传递的意义,调用过来调用过去最终只是为了一个保存吗?
|
14
andylsr 2019-08-02 10:58:00 +08:00 via Android
@qw30716 官方文档里有代码,用 basemanager 注册一个 queue,监听一个端口,别的 py 从 queue 读数据就行了
|
15
co3site 2019-08-02 10:58:19 +08:00 via Android
@qw30716 那也没必要公有化啊,你定义一个函数 return 过去,另外一个 py 程序拿到不就行了吗?
|
16
qw30716 OP |
17
Huelse 2019-08-02 11:06:18 +08:00
比较规范的是写 get 和 set 函数,
而且推荐写成类,然后在一个 py 文件里调用即可 |
19
XIVN1987 2019-08-02 11:10:02 +08:00
|
20
lishunan246 2019-08-02 11:52:30 +08:00 via Android
跨进程用文件或者 SQLite
|
21
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]: ``` |
22
oahebky 2019-08-02 12:02:54 +08:00
```
测试 V2EX support markdown ``` |
23
Trim21 2019-08-02 12:03:42 +08:00 via Android
不要用 from a import var 用 import a 然后使用 a.var 就好了
|
24
oahebky 2019-08-02 12:03:56 +08:00
好吧。上面代码文件有缩进。只能考楼主自己了。
|
25
oahebky 2019-08-02 12:07:27 +08:00
如果修改的时候,cDOTpy+bDOTpy` 相关进程正在运行。想要不关闭 /重启进程,那么进程间通信(与 aDOTpy )是必须的。
|
26
qw30716 OP 早上一直回复不了,被 V2EX 禁言了
|
29
zeroze 2019-08-02 15:27:25 +08:00
写入 config.ini,用 config 包处理
|
30
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 的方式。 |
31
ptrees 2019-08-02 18:56:42 +08:00
我想了想,存取一个公用的数据,这不就是数据库的作用吗...
|