2014-03-05 35 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

相關問題