【问题标题】:How do I get terminal to update variables in a script?如何让终端更新脚本中的变量?
【发布时间】:2017-06-30 19:15:16
【问题描述】:

我有一个看起来像这样的 python 脚本文件夹...

 global_variables.py
 main.py
 helper_1.py 
 ...
 helper_n.py
  • main.py 是我运行的脚本。
  • helper.py 脚本由 main.py 导入。
  • global_variables.py 提供所有 python 脚本都使用的全局变量

我想像这样将参数传递给 main.py:

user$ python main.py arg1 arg2 ...

其中 args 是 global_variables.py 中的 3-4 个变量(不是全部;其中定义了大约 50 个变量)。如果我没有 helper.py 脚本,我将通过在 main.py 中编写来实现它

import sys
import global_variables

global_variables.var1 = arg1
global_variables.var2 = arg2
...

不幸的是,这些更改不会传播到其他 helper.py 脚本。

解决此问题的最优雅的解决方案是什么?我能做的是不使用全局变量并将所有参数手动传递给每个 python 脚本,但这看起来很可怕,并且考虑到所有脚本放在一起的长度(约 4000 行代码),将带我小时和小时(包括调试时间)。

基本上,我想要什么:

user$ python main.py arg1 arg2 ...

首先更新global_variables.py中的变量,然后然后运行main.py。也许这是可能的?

【问题讨论】:

  • 更新内存中的变量不会改变源代码。那会很古怪。
  • 所以你是说我最后的建议是不可能的?
  • 请向我们展示其中一个有问题的helper_*.py 文件。谢谢;)

标签: python terminal global-variables command-line-arguments


【解决方案1】:

不确定这是否正确反映了您的项目设置,但这种简单的方法可以按预期工作:

main.py

import sys
import global_vars

global_vars.x = sys.argv[1]
print "main: %s" % global_vars.x

import helper
helper.f()

helper.py

import global_vars

print "helper: %s" % global_vars.x

def f():
    print "helper: f: %s" % global_vars.x

global_vars.py

x = "<initial value>"

调用时:

$ python main.py X

输出:

main: X
helper: X
helper: f: X

有些“延迟”的import helper 确保所有 helper.py 模块代码也能看到更新后的global_vars 值。

【讨论】:

    【解决方案2】:

    我不确定这正是您想要做的,但您可以使用shelve 模块创建一个搁置,将所有全局数据存储为键吗?

    这样的?

    # main script
    import shelve
    myglobals = shelve.open("myglobals")
    myglobals['varname1'] = value1
    myglobals['varname2'] = value2
    myglobals.close()
    

    然后在其他脚本中访问'globals':

    # helper script
    import shelve
    myglobals = shelve.open("myglobals")
    value1 = myglobals['varname1']
    value2 = myglobals['varname2']
    myglobals.close()
    

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 2016-07-23
      • 2014-07-31
      • 2017-09-03
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 2015-10-01
      • 2014-08-01
      相关资源
      最近更新 更多