Python 3.x Python未正确读取文件/执行代码

Python 3.x Python未正确读取文件/执行代码,python-3.x,Python 3.x,我有一个奇怪的问题,我不知道为什么会发生 在游戏中,我键入一个命令(::pos),将位置坐标写入.txt文件。当我尝试自动化此过程(使用win32com键入命令)并读取文件时,将显示以前的坐标,而不是当前坐标。这毫无意义,因为我在显示坐标之前更新坐标: def add(self): id = self.myTextInput.text() shell.AppActivate('App title') # Update position file shell.Sen

我有一个奇怪的问题,我不知道为什么会发生

在游戏中,我键入一个命令(::pos),将位置坐标写入.txt文件。当我尝试自动化此过程(使用win32com键入命令)并读取文件时,将显示以前的坐标,而不是当前坐标。这毫无意义,因为我在显示坐标之前更新坐标:

def add(self):
    id = self.myTextInput.text()
    shell.AppActivate('App title')
    # Update position file
    shell.SendKeys('::pos')
    shell.SendKeys('{ENTER}')
    # Add object
    shell.SendKeys('::object ' + id + ' 0')
    shell.SendKeys('{ENTER}')
    # Read position
    with open('.txt file path', 'r') as f:
        f = f.read().split()
        self.listWidget.addItem(id + ' ' + f[1] + ' ' + f[3] + ' 0')
按下“添加”按钮后,代码即被执行。奇怪的是,如果我创建一个单独的名为“updatePos”的按钮和函数(我在按下“add”之前按下该按钮和函数),那么一切都可以正常工作,但如果我只是在add中调用updatePos()函数,则一切都不起作用。我也尝试过使用sleep来交错命令,但这似乎也起到了奇怪的作用(在它之前休眠代码块,不确定是否是shell命令弄乱了它?)


我想代码的执行顺序可能不正常吧?例如,在位置更新之前打开和读取文本文件-但不确定发生这种情况的原因。

在读取更改之前,您需要关闭文件


尝试将f.close()添加到此结尾。

您需要先关闭文件,然后才能读取更改


尝试将f.close()添加到此结尾。

我使用的是“with open”,所以执行嵌套块后,文件应该自动关闭吗?我尝试添加f.close(),但它似乎并没有解决我的问题啊,你能展示代码的另一部分吗。这是自动化代码,对吗?您能否显示此调用/使用的部件。我使用的是“with open”,因此执行嵌套块后,文件应自动关闭?我尝试添加f.close(),但它似乎并没有解决我的问题啊,你能展示代码的另一部分吗。这是自动化代码,对吗?你能展示一下这个调用/使用的部分吗?我猜
::object
选择了一个对象,并且
::pos
转储了它的位置-在这种情况下,你似乎是以错误的顺序执行这些命令。在任何情况下,都可能需要一个小的延迟来允许游戏实际写入文件。::pos转储玩家当前位置,并且::object在该位置生成一个对象,但是不需要位置坐标(稍后需要它们)。我尝试在这两个命令之间添加一个sleep(n),但它似乎在执行任何一个命令之前休眠了n秒?不确定为什么我在Python中找到的SendKeys用法示例都使用了
win32api.Sleep(500)
延迟,而不是Python的
time.Sleep()
-这可能值得一试,我看不到任何其他可能导致问题的东西。出于某种原因,仍然停止一切!把它放在两个命令之间,但它的作用就像我把它放在它们前面一样。我猜,
::object
选择一个对象,而
::pos
转储其位置-在这种情况下,您似乎是以错误的顺序执行这些命令。在任何情况下,都可能需要一个小的延迟来允许游戏实际写入文件。::pos转储玩家当前位置,并且::object在该位置生成一个对象,但是不需要位置坐标(稍后需要它们)。我尝试在这两个命令之间添加一个sleep(n),但它似乎在执行任何一个命令之前休眠了n秒?不确定为什么我在Python中找到的SendKeys用法示例都使用了
win32api.Sleep(500)
延迟,而不是Python的
time.Sleep()
-这可能值得一试,我看不到任何其他可能导致问题的东西。出于某种原因,仍然停止一切!把它放在两个命令之间,但它的作用就像我把它放在两个命令之前一样