簡體   English   中英

Python 在未安裝 python 的計算機上使用腳本的 pyinstaller 版本時,腳本未更新文件內容

[英]Python Script not updating file contents while using a pyinstaller version of the script on a machine without python installed

所以我現在的問題是我寫了一個腳本,每次你按下箭頭鍵時都會更新文件中的內容。 該腳本在我的 PC 上運行良好。 我使用 pyinstaller 試圖創建腳本的直接獨立版本。 現在的問題是腳本似乎沒有更新他們的文件,在應用程序的控制台中,它確實表明它正在正確計算分數。 但是在打開文件時它保持在0。文件不是只讀的?:有什么想法嗎? 下面的代碼:

import os
import time
import threading


from pynput import keyboard

def on_press(key):

    if (key == keyboard.Key.down):
        wR = open("Round Number.txt", "w")
        w1 = open("Team 1 Score.txt", "w")
        w2 = open("Team 2 Score.txt", "w")
        wR.write("1")
        w1.write("0")
        w2.write("0")
        print("All values have been reset")
    
    if (key == keyboard.Key.up):
        r = open("Round Number.txt", "r")
        previousScore = r.read()
        w = open("Round Number.txt", "w")
        newScore = str(int(previousScore) + 1)
        print("Round file has changed to " + newScore)
        w.write(newScore)
        #print(open("Round Number", "r").read())
    
    if (key == keyboard.Key.left):
        r = open("Team 1 Score.txt", "r")
        previousScore = r.read()
        w = open("Team 1 Score.txt", "w")
        newScore = str(int(previousScore) + 10)
        w.write(newScore)
        print("Team 1 now has " + newScore)
        #print(open("Team 1 Score.txt", "r").read())

    if (key == keyboard.Key.right):
        r = open("Team 2 Score.txt", "r")
        previousScore = r.read()
        w = open("Team 2 Score.txt", "w")
        newScore = str(int(previousScore) + 10)
        w.write(newScore)
        print("Team 2 now has " + newScore)
       # print(open("Team 2 Score.txt", "r").read())

def on_release(key):
    pass
    #print('{0} released'.format(
        #key))
    '''if key == keyboard.Key.esc:
        # Stop listener
        return False'''

#Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

# ...or, in a non-blocking fashion:
listener = keyboard.Listener(
    on_press=on_press,
    on_release=on_release)
listener.start()```

我在您的代碼中立即看到的主要錯誤之一是您在打開文件后沒有關閉它們。 我沒有直接測試你的代碼,但我確實修改了它以with如下。 我測試了它,它工作正常。 我還創建了一個可執行文件,它也可以很好地處理存儲在文件中的值。

from pynput import keyboard

def on_press(key):

    if (key == keyboard.Key.down):
        with open("Round Number.txt", "w") as wR:
            wR.write("1")
        with open("Team 1 Score.txt", "w") as w1:
            w1.write("0")       
        with open("Team 2 Score.txt", "w") as w2:
            w2.write("0")

        print("All values have been reset")

    if (key == keyboard.Key.up):
        with open("Round Number.txt", "r") as r:
            previousScore = r.read()
        with open("Round Number.txt", "w") as w:
            newScore = str(int(previousScore) + 1)
            w.write(newScore)

        print("Round file has changed to " + newScore)
    
    if (key == keyboard.Key.left):
        with open("Team 1 Score.txt", "r") as r:
            previousScore = r.read()
        with open("Team 1 Score.txt", "w") as w:
            newScore = str(int(previousScore) + 10)
            w.write(newScore)
        print("Team 1 now has " + newScore)

    if (key == keyboard.Key.right):
        with open("Team 2 Score.txt", "r") as r:
            previousScore = r.read()
        with open("Team 2 Score.txt", "w") as w:
            newScore = str(int(previousScore) + 10)
            w.write(newScore)
        print("Team 2 now has " + newScore)

def on_release(key):
    pass

#Collect events until released
with keyboard.Listener(on_press=on_press,on_release=on_release) as listener:
    listener.join()

# ...or, in a non-blocking fashion:
listener = keyboard.Listener(on_press=on_press,on_release=on_release)
listener.start()

一個主要問題是我必須手動創建 3 個文件,並且在開始時沒有按下Down導致程序崩潰。 也嘗試解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM