2014-01-19 47 views
0

這是程序。它在IDLE上效果很好,但在詢問您是否知道密碼長度後會崩潰。我似乎無法想象我想要失蹤。我會喜歡任何幫助。無法在Windows上運行CMD上的python程序

import itertools 
import string 
import sys, os, cmd 

from datetime import datetime 
FMT = '%Y-%m-%d %H:%M:%S' 
passwordstried = 0 


numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0,] 
#symbols = [ 
lowercaseletters = ["q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l","g","h","j","k","l","z","x","c","v","b","n","m"] 
uppercaseletters = ["Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L","G","H","J","K","L","Z","X","C","V","B","N","M"] 


stuff = lowercaseletters + uppercaseletters + numbers 

if (input("Do you have the length of the password?") == 'y'): 
    lengthstartingvalue = int(input("Password length: ")) 
else: 
    lengthstartingvalue = 0 


starttime = datetime.now().strftime('%Y-%m-%d %H:%M:%S') 
print(starttime) 





starttime = datetime.now().strftime('%Y-%m-%d %H:%M:%S') 
for L in range(lengthstartingvalue, len(stuff)+1): 
    for subset in itertools.combinations_with_replacement(stuff, L): 
     print(subset) 
     passwordstried = passwordstried + 1 
    if (L>lengthstartingvalue-1): 
     break 

endtime = datetime.now().strftime('%Y-%m-%d %H:%M:%S') 
elapsed = datetime.strptime(endtime, FMT) - datetime.strptime(starttime, FMT) 
print ('Time elapsed:',elapsed) 
print ('Passwords tried:',passwordstried) 
+0

它如何崩潰?你能發佈異常嗎? –

+0

就是這樣。我什至不知道發生了什麼。 – Torkoal

+1

你能提供更多信息嗎?追溯?看起來你正在使用Python 3.x.問題是Windows消失了嗎?如果是這樣,只需添加'input()'作爲最後一條語句,以便窗口保持打開狀態,直到您點擊 Levon

回答

1

@ 275365是正確的,你應該使用

if (raw_input("Do you have the length of the password?") == 'y'):

,而不是

if (input("Do you have the length of the password?") == 'y'):

使用input()導致崩潰,

In [11]: run tt.py 
Do you have the length of the password?y 
--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
C:\Program Files (x86)\ipython-0.12.1\IPython\utils\py3compat.py in execfile(fname, glob, loc) 
    166    else: 
    167     filename = fname 
--> 168    exec compile(scripttext, filename, 'exec') in glob, loc 
    169  else: 
    170   def execfile(fname, *where): 

D:\Users\sp\Desktop\tt.py in <module>() 
    16 stuff = lowercaseletters + uppercaseletters + numbers 
    17 
---> 18 if (input("Do you have the length of the password?") == 'y'): 
    19  lengthstartingvalue = int(input("Password length: ")) 
    20 else: 

D:\Users\sp\Desktop\<string> in <module>() 

NameError: name 'y' is not defined 

,同時將其更改爲raw_input()運行至完成而沒有崩潰。

+0

OP聲稱使用Python 3.3。除非多個Python版本存在問題,OP還沒有意識到(可能是這種情況),但這不是答案。 – user2357112

+1

使用print()會表明我正在使用3.3我剛卸載了2.7以確保它不是這樣。 – Torkoal

+0

@Conner如果將'input()'改爲'raw_input()',會發生什麼?我在3.2.3下運行這個w/o崩潰(我現在可以訪問的唯一的3.x版本)。 – Levon

1

看來你可能運行的是不同於你編碼的IDLE版本。如果我理解正確,raw_input()在你的CMD上工作,但在IDLE中中斷,而input()在IDLE中工作並在CMD中中斷。您可能需要下載正確版本的IDLE for Python 3,或者如果您擁有它,您只需訪問Python 2的一個版本。

否則,它可能是Windows中Path變量的問題。在系統 - >高級系統設置 - >環境變量 - >路徑 - 這需要設置爲您的Python 3.3安裝。

對我來說,似乎你的路徑可能仍然卡在先前的安裝。

相關問題