2017-03-09 47 views
1

我是一個Python和編程的半小老鼠,但是當我雙擊打開.py文件時,我的程序無法正常工作。當我通過命令行運行它並通過IDE(Pycharm)運行它時。基本上,當雙擊時,它會到達key = input(「Enter decode key:」)部分,輸入內容後會關閉。任何幫助將不勝感激。我知道我的代碼不夠優雅,它只是需要工作。 Python 3.5.2Python腳本無法右鍵雙擊時運行.py

如果有幫助,樣本輸入將是23的「關鍵」和142,128,133,123,134,142「編碼」。它應該輸出「窗口」,並在命令行和Pycharm中成功執行。

import sys 


def main(key, encoded): 

    if encoded == 0:    #This should run if program was double-clicked (no arguments) 
     encoded = input("Paste encoded JavaScript: ") 
     key = input("Enter decode key: ") 

    def decode(key, encoded):   #Decode the data 
     encoded = encoded.split(',') #Split each section delimiting by a colon 
     decoded = [] 
     for x in encoded: 
      x = int(x) - int(key)  #Subtract the key from the number in each section 
      decoded.append(chr(x))  #Change from ASCII decimal code to the ASCII character 
     decoded = ''.join(decoded)  #Join back into a string 
     print(".") 
     print(".") 
     print(".") 
     print(".") 
     print("Encoded data:") 
     print(encoded) 
     print("Decode key:") 
     print(key) 
     print("Decoded data:") 
     print(decoded) 
     return 0 

    decode(key, encoded)   #Jump into the decode function 
    return 0 

if __name__ == "__main__": 
    try: 
     if len(sys.argv) > 1:   #If length is greater than 1, then there were arguments added upon program execution 
      key = sys.argv[1]   #The "key" should be the first argument 
      encoded = sys.argv[2]  #The "encoded" data should follow 
     else: 
      key = 0     #If length is anything else, then set them to 0 and ask for the data later 
      encoded = 0 
     main(key, encoded)    #Jump into main function and pass the key and encoded arguments 
    finally: 
     input("Press Enter to exit") 
+0

您可以放在最後:''input(」按Enter退出「)'' – jasonharper

+0

對不起,我只是改了標題。最初,我認爲它最終不會暫停。但後來我意識到它甚至沒有通過該計劃。它應該已經暫停後打印出信息(我有y =輸入) – zinzara

+0

我不能完全知道發生了什麼。我認爲你的粘貼代碼有一些格式錯誤。 –

回答

0

很容易地把輸入(「」)在你的代碼的末尾,以便腳本堅持在那裏

0

我建議用異常處理包裝程序。

這裏是你的代碼的最後一節會是什麼樣的一個片段:

if __name__ == "__main__": 
    try: 
     if len(sys.argv) > 1: 
     # ... 
    finally: 
     input("Press the enter to exit") 

通過這樣做,不管你的程序是否成功完成或失敗,你會得到一個提示,要求你按輸入。這將使您有機會在關閉窗口之前閱讀屏幕上的內容。

只要在程序結束時放上一個input("")就可以了而不是可以在程序失敗的情況下工作,您可能會在此處發生這種情況。

+0

謝謝。我已經更新了代碼並解釋了一切。程序在輸入解碼密鑰後立即暫停(最後部分)。爲什麼它不跳入解碼功能? – zinzara

+0

問題剛剛得到了一個格式化的+1 - 我希望在這個網站上的每個人都照顧你。你可以試試在try語句之前添加'print sys.argv'嗎?它可能會流露出一些光芒。 – Shadow

+0

所以,我試過了,我得到的只是文件的路徑。應該發生什麼。但是,我有一個無關的更新。所以,我在工作中(這將被使用),並且因爲我們在那裏使用Python 2.7而不得不將一些東西轉換。一旦我做到了這一點,一切都很順利。我改變的唯一的事情是打印到沒有括號的地方,並輸入到raw_input。我甚至在仍然使用Python 3.5的時候在家裏完成了這個任務,並且它也可以工作。什麼是問題? – zinzara

0

我想我剛剛解決了我的問題。出於某種原因,即使我的路徑設置爲Python 3.5,並且我右鍵單擊以打開3.5,並且它僅在2.7中打開,但雙擊.py時,它仍停留在我的計算機上使用Python 2.7 ...因此,這只是開創了一個新問題。 「