Python 如何仅在文件打开时运行命令

Python 如何仅在文件打开时运行命令,python,if-statement,operating-system,Python,If Statement,Operating System,我试图让一个文件更改其名称,只要另一个文件正在运行, 当我退出正在运行的文件时,我希望更改后的文件名恢复为其原始名称 我使用的代码似乎只是打开文件并忽略其下的命令, 非常感谢你的帮助 import os import time if os.startfile(r'C:\Users\Michael\Desktop\test\file.exe'): time.sleep(3) os.rename(r'C:\Users\Michael\Desktop\test\name.txt',

我试图让一个文件更改其名称,只要另一个文件正在运行, 当我退出正在运行的文件时,我希望更改后的文件名恢复为其原始名称

我使用的代码似乎只是打开文件并忽略其下的命令, 非常感谢你的帮助

import os
import time


if os.startfile(r'C:\Users\Michael\Desktop\test\file.exe'):
    time.sleep(3)
    os.rename(r'C:\Users\Michael\Desktop\test\name.txt',r'C:\Users\Michael\Desktop\test\name2.txt')

像这样的方法可能行得通,但可能不是最好的办法:

编辑:添加打印和时间。睡眠每10秒检查一次

import os
import psutil
import time


process_name = 'some_process'
file_name = 'some_file_path'
replacement = 'some_replacement_file_name'

while True:
    print(f'looking for {process_name}')
    time.sleep(10)
    if process_name in (p.name() for p in psutil.process_iter()):
        print(f'{process_name} started')
        os.rename(file_name, replacement)
        while True:
            time.sleep(10)
            if not process_name in (p.name() for p in psutil.process_iter()):
                print(f'{process_name} stopped')
                os.rename(replacement, file_name)
                break

像这样的方法可能行得通,但可能不是最好的办法:

编辑:添加打印和时间。睡眠每10秒检查一次

import os
import psutil
import time


process_name = 'some_process'
file_name = 'some_file_path'
replacement = 'some_replacement_file_name'

while True:
    print(f'looking for {process_name}')
    time.sleep(10)
    if process_name in (p.name() for p in psutil.process_iter()):
        print(f'{process_name} started')
        os.rename(file_name, replacement)
        while True:
            time.sleep(10)
            if not process_name in (p.name() for p in psutil.process_iter()):
                print(f'{process_name} stopped')
                os.rename(replacement, file_name)
                break

我手边没有Windows电脑,所以无法测试。但是,
os.startfile
()的Python文档没有指定任何与返回值有关的内容。这使我怀疑返回值是
None
或类似的值。如果是这样,这将解释为什么代码块没有运行

该文档中的这一行应该很有帮助:

启动关联的应用程序后,startfile()立即返回。没有等待应用程序关闭的选项,也无法检索应用程序的退出状态


因此,由于您试图在进程终止后执行某些操作(即恢复文件名),因此您希望使用与
os.startfile
不同的函数。我对Windows不太熟悉,所以也许其他人可以为您指出正确的方向。

我手边没有Windows电脑,因此无法测试此功能。但是,
os.startfile
()的Python文档没有指定任何与返回值有关的内容。这使我怀疑返回值是
None
或类似的值。如果是这样,这将解释为什么代码块没有运行

该文档中的这一行应该很有帮助:

启动关联的应用程序后,startfile()立即返回。没有等待应用程序关闭的选项,也无法检索应用程序的退出状态


因此,由于您试图在进程终止后执行某些操作(即恢复文件名),因此您希望使用与
os.startfile
不同的函数。我对Windows不太熟悉,所以也许其他人可以为您指出正确的方向。

您不想重命名一次,然后运行
while
循环以检查进程列表吗?事实上,你的top
while
循环永远不会结束。它有意地是无限的。。。只要脚本正在运行,您就可以生成和终止进程,并且每次它都会继续重命名,但这不是最好的主意,可能会有一段时间。请在while循环前面睡眠(10)以使其不会运行太多。您不想重命名一次,然后运行
while
循环以检查进程列表吗?事实上,你的top
while
循环永远不会结束。它有意地是无限的。。。只要脚本正在运行,您就可以生成和终止进程,并且每次都会继续重命名,但这不是最好的主意,可能会有一段时间。请在while循环前面休眠(10),以使其不会运行太多