os.path.exists() - 从另一个脚本传递变量

时间:2014-05-02 09:26:53

标签: python python-2.7

我正在使用一个包含此脚本的脚本:

if not os.path.exists(copy):
    print "Wrong path-directory name"

我有另一个包含所有变量:

copy = /users/.../.... e.t.c.

当我通过第一个呼叫第二个时,我正在采取所有期望的结果,除了错误的路径。消息是:

if not os.path.exists(copy):
NameError: name 'copy' is not defined.

为什么我的脚本在os.path模块中时无法识别复制路径?我应该修改什么?

1 个答案:

答案 0 :(得分:2)

variables.py:

copy="/users/.../.... e.t.c."

您有几个选择:

script.py

import variables
print copy # NameError: name 'copy' is not defined
print variables.copy # /users/.../.... e.t.c.

或:

from variables import copy
print copy # /users/.../.... e.t.c.

或:

from variables import *
print copy # /users/.../.... e.t.c.

或:

execfile("variables.py")
print copy # /users/.../.... e.t.c.

问题只是当您导入variables时,该文件中的所有内容都属于variables,因此您可以使用variables.copy访问该文件。

如果您不想这样做,可以使用from variables import copy显式导入该变量,然后将其导入为copy。这会隐藏任何正在阅读代码的人的信息,因为他们可能误导相信copy是一个局部变量,而实际上它是在其他地方定义的。

下一个方法与第二个方法相同,但它从variables导入所有定义的对象。这比第二种方法更糟糕,因为他们甚至无法看到哪些变量来自import

第四种方法只运行variables.py文件,因为脚本被直接放入execfile调用位置的代码中。这比第三种方法更不透明。请不要用它来做你想做的事。

我的偏好是第一种方法,因为它可以很容易地看到所有内容的来源,而且就个人而言,from X import *导入样式很糟糕,而最后一种方式只是可怕。