2014-03-05 53 views
1

我有两个python脚本广东话输入变量从一个脚本到另一个蟒蛇

emotion.py

if __name__ == '__main__': 

    user=raw_input("Enter your name\n")  

    print("Calling open smile functions.....") 

    subprocess.Popen("correlationSvg.py", shell=True) 

correlationSvg.py

from emotion import user 
import os 
import csv 

with open('csv/test/'+user+'.csv') as f: 
    reader = csv.DictReader(f, delimiter=';') 
    rows = list(reader) 

我收到错误

ImportError: cannot import name user

这是为什么呢?

回答

1

变量userif __name__ == '__main__'块内定义。执行import语句时不会执行这一个。

当然,你可以定义(脚本 - )全局变量

user = "" 
if __name__ == '__main__': 

    user=raw_input("Enter your name\n")  

    print("Calling open smile functions.....") 

    subprocess.Popen("correlationSvg.py", shell=True) 

如果你想获得用户同时执行,我想无论是放线

user=raw_input("Enter your name\n") 

correlation.py或:

in sympathy.py: 

def get_user(): 
    user=raw_input("Enter your name\n") 

并从correlation.py访问此功能。请记住:import声明发生在您调用解释器时,而用户分配在运行时发生。

+2

这没有意义,'if'在Python中没有自己的作用域。 – pandubear

+0

你完全正确,回答编辑,非常感谢 – ProfHase85

+0

如果我需要本地块的值,该怎么办?。按照上面的方法在correlationSvg.py中获得空值作为用户 – san45

0

你可以试试这个,迫使user是全球性的:

user = '' 
if __name__ == '__main__': 
    user=raw_input("Enter your name\n")  

不过...你真的应该想想自己在做什么这里。如果你不希望设置user,除非这是主模块 - 当你从另一个模块导入它时你期望发生什么?

很可能,您应该将此作为参数传递给函数,而不是尝试导入它。

+0

如果我需要本地块的值,那该怎么办呢?在完成上面的操作之后,我们会在像correlationsvg.py – san45

+0

这样的用户中获得空值,正如其他人所说的那样,如果这是条目,则__name__只会是__main__模块,即'c:\ python26 \ python.exe emotion.py'。那不是你想要的。当你导入一个模块时,_all_它的代码立即执行(尽管通常,'代码'只是声明一个函数)。如果您希望始终完成用户提示,请不要将其隐藏在名称检查后面,只需将其包含即可。你也可以使它成为用户输入并返回字符串的函数;你会然后调用该函数。 –

1

因为您正在使用if __name__ == '__main__'。如果从另一个模块导入文件,__name__将被设置为模块的名称。这意味着,只有在运行emotion.py时才会处理该缩进中的代码。

有关__name__的详细说明,您可能需要查看here

相关问题