Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Python脚本是否已在Windows中运行_Python_Windows_Process - Fatal编程技术网

检查Python脚本是否已在Windows中运行

检查Python脚本是否已在Windows中运行,python,windows,process,Python,Windows,Process,检查特定Python脚本是否已在Windows中运行的最佳/最简单方法是什么 我有一个脚本,它遍历一个文件夹中的所有文件,并将它们复制到另一个文件夹(排序到电影或电视节目文件夹)。 我想确保当脚本启动时,没有另一个进程(同一脚本的)正在运行,这样我就不会遇到两个试图移动相同文件的脚本的问题 我曾尝试在脚本开始时创建一个文件,并在脚本完成时将其删除,但当脚本崩溃和/或抛出错误时,我遇到了问题 我知道我可以使用,但是我会得到进程名(python.exe),我正在寻找一个为什么来区分python进程运

检查特定Python脚本是否已在Windows中运行的最佳/最简单方法是什么

我有一个脚本,它遍历一个文件夹中的所有文件,并将它们复制到另一个文件夹(排序到电影或电视节目文件夹)。 我想确保当脚本启动时,没有另一个进程(同一脚本的)正在运行,这样我就不会遇到两个试图移动相同文件的脚本的问题

我曾尝试在脚本开始时创建一个文件,并在脚本完成时将其删除,但当脚本崩溃和/或抛出错误时,我遇到了问题


我知道我可以使用,但是我会得到进程名(python.exe),我正在寻找一个为什么来区分python进程运行的是我的脚本还是其他程序。

您可以使用
psutil.process().cmdline()
查看进程的完整命令行


或者,您可以锁定正在处理的文件。请参阅如何在ms windows上执行此操作的答案。锁的问题是,您必须小心地移除它们,尤其是在发生错误时。

使用。它是跨平台的,使用本机操作系统功能,比任何锁文件创建模式都更加健壮

我通过使用一个空的虚拟文件解决了这个问题。
在进程开始时,我检查文件是否存在,如果不存在,我创建一个新文件,运行进程并在最后删除它(即使进程失败),如果文件确实存在,这意味着进程现在正在运行,因此我终止当前(新)进程。

对于Windows o.s。您可以使用timestamp.txt文件

timestamp = 'timestamp.txt'
...
elif windows:
    try:
        new_timestamp = False
        if not os.path.exists(timestamp):
            new_timestamp = True
            try:
                with open(timestamp, 'a') as f_timestamp:
                    f_timestamp.write(str(int_t0))
            except IOError as e:
                out1 = 'M. Cannot open file for writing. Error: %s - %s.' \
                           % (e.logfile, e.strerror) + ' -> Exit code 3'
                logging.error(out1)
                sys.exit(3)

        if not new_timestamp and os.path.exists(timestamp):
            out1 = 'N. Script ' + __file__ + ' is already running.'
            print(out1)
            logging.error(out1)
            sys.exit(0)

    except IOError as e:
        out1 = 'J. Cannot open file. Error: %s - %s.' \
           % (e.filepath, e.strerror)  + ' -> Exit code 4'
        logging.error(out1)

...
try:
    f_timestamp.close()
    os.remove(timestamp)
except OSError as e:
    logging.error('B. Cannot delete ' + timestamp + \
          ' Error: %s - %s.' % (e.filename, e.strerror))

将所有顶级执行语句打包到一个(顶级)函数中,从
try
调用它,
except
语句调用它,并删除
exept
部分中的“lock”文件(如果存在)。有点过分,我通过创建一个文件并在
finally
部分中删除它来解决它。