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