【问题标题】:How to access variables from file passed through command line如何从通过命令行传递的文件中访问变量
【发布时间】:2016-01-04 17:46:19
【问题描述】:

目前我的包中有config.py,我可以从其他py文件访问config.py中定义的变量

import config
var1 = config.var1

首先,我可以将文件作为参数传递吗? test.py config.py

但是有没有办法通过命令行将配置文件作为参数传递并访问其中定义的变量?我看到有sys 模块来获取通过命令行传递的参数。但是我可以得到传递文件中定义的变量吗?

编辑 现在我能够以__import__(sys.argv[1]) 访问传递文件中的变量并调用python test.py config。但是我可以通过给出 pythonpath 来调用 config.py 文件吗? e/g/python test.py ~/Desktop/configPYTHONPATH='~/Desktop/' python test.py config?因为如果我这样做,我会得到no module error

【问题讨论】:

  • 你指的是命令行参数,比如my_script.py a=1 b=abc d=1,23,5
  • 只需从 sys.argv 中获取文件名,然后导入文件并访问变量。
  • @ChadS。我尝试了 sys.argv 但我收到错误 import by filename is not supported 我尝试了 __import__(sys.argv[1]) 并通过了 python test.py ./config.py
  • @user2661518:如果去掉路径前缀和 py 后缀会怎样?此外,为什么不以与语言无关的方式(例如 JSON 或 XML)存储变量并使用 Python 库从文件中读取变量?

标签: python python-2.7 arguments


【解决方案1】:

您对import config 所做的事情是让来自config.py 的所有名称在您的脚本中可用。

您可以使用__import__(sys.args[1]) 来执行此操作,如this question 的答案中所述。

但是对于实际的程序配置,请务必查看argparse 模块!

p = argparse.ArgumentParser(description="...")
p.add_argument("--var1", type=int)
p.add_argument("--var2", type=str)

config = p.parse_args() # will look at sys.args by default

if config.var1 > 10:
    ....

【讨论】:

  • 使用argparse 你不能传递文件,对吧?我尝试了 sys.argv 但我收到错误 import by filename is not supported 我尝试了 __import__(sys.argv[1]) 并通过了 python test.py ./config.py
  • 知道了!我以python test.py config 运行它但是如何通过路径调用配置文件?例如python test.py ~/Desktop/config
  • 在windows上,你可以set PATH=%PATH%;c:/dir/with/script,然后你就可以在任何地方运行你的脚本了。
猜你喜欢
  • 2012-11-02
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多