2016-10-11 67 views
-2

奇怪的問題我知道一個函數被調用了兩次,但我不知道它發生的地方或原因。爲什麼我的函數循環python

繼承人我的代碼:

8 def getAccessSecretName(): 
    9   access_key = raw_input("Enter Access Key: ") 
10   secret_key = raw_input("Enter Secret Key: ") 
11   yourName = raw_input("Enter your name: ") 
12   print "Access Key: %s" % access_key 
13   print "Secret Key: %s" % secret_key 
14   print "Your full name is: %s" % yourName 
15   with open (tfVariables,"w") as text_file: 
16     text_file.writelines(['access_key = \"'+ access_key +'\"\nsecret_key = \"'+ secre t_key +'\"\n\n\n', 
17         'amis = {\n', 
18         ' ', 
19         'us-west-1 = '+ usWest1ami +'\n', 
20         ' ', 
21         'us-west-1 = '+ usWest2ami +'\n', 
22         ' ', 
23         '}']) 
24   return access_key, secret_key, yourName 

69 def makeMainTF(): 
70   NameTag,mcGroupTag,mcIPTag = makeNameMCTag() 
71   access_key, secret_key, yourName = getAccessSecretName() 
72   with open (tfFileName,"w") as text_file: 
73     text_file.writelines(['provider \"aws\" {\n', 
74          ' ', 
75           'access_key = \"${var.access_key}\"\n ', 
76          ' ', 
77           'secret_key = \"${var.secret_key}\"\n ', 
78          ' ', 
79           'region  = \"${var.access_key}\"\n ', 
80          '}\n\n\n', 
81          'resource \"aws_instance\" \"example\"  {\n', 
82           ' ', 
83          'ami = \"${lookup(var.amis, var.region) }\"\n', 
84           ' ', 
85           'instance_type = \"%s\" \n}' % instan ceType, 
86           '\n\n\n\n', 
87           'tags {\n', 
88           ' ', 
89           'Name = \"%s\"\n' % NameTag, 
90           ' ', 
91           'Multicast = \"%s,%s\"\n' % (mcGroupT ag,mcIPTag), 
92           ' ', 
93           #'Owner = \"%s\"' % " " % yourName, 
94           'Owner = \"%s\"' % yourName, 
95           '\n}\n\n\n']) 

所以這是我期待的事情發生。當我運行代碼時,它會提示用戶訪問密鑰,密鑰和名稱。然後重複給用戶一次並將信息寫入文件。當我呼叫這兩種功能時會發生什麼:

Enter Access Key: key1 
Enter Secret Key: secret1 
Enter your name: chowpay 
Access Key: key1 
Secret Key: secret1 
Your full name is: chowpay 
newnumber = 68 
Name Tag: vlslabs67 
Multicast Tag: vlslabmc, 172.16.0.67 
Enter Access Key: key2 
Enter Secret Key: secret2 
Enter your name: chowpay2 
Access Key: key2 
Secret Key: secret2 
Your full name is: chowpay2 

請注意,它提示用戶輸入兩次密鑰及其名稱。這沒有道理,因爲這是我已經習慣了調用該函數:

getAccessSecretName() 
makeMainTF() 

謝謝!


我在第53行正確的函數修正上面的代碼,它是getAccessSecret 名稱(),而不是getAccessSecret()

修正再次添加了錯誤的功能makeTfVars被張貼在問題,但makeMainTF()是,這個問題應該是什麼。

+3

要調用'getAccessSecretName()'從調用代碼,並再次從'makeTfvars()',但你不顯示如自調用。 – cdarke

+3

誰是'getAccessSecret()'? – essramos

+0

也請不要複製行號。 – Julien

回答

0

我認爲是循環中的一個問題是我如何認爲python中的變量傳遞給其他函數的問題。

看起來像這樣

71: access_key, secret_key, yourName = getAccessSecretName() 

並不意味着讓^從getAccessSecretName的函數變量值()。愚蠢的錯誤由我。相反,它意味着重新運行該函數以獲取導致用戶被再次提問的值。

「修復」 被添加

10 def getAccessSecretName(): 
**11   global access_key, secret_key, yourName** 

和刪除

71: access_key, secret_key, yourName = getAccessSecretName() 

這讓我用我的變量等功能。不知道這是否是正確的做法,但它對我有用。歡迎聽聽會有更好的方式。

再次感謝