我正在编写的代码有问题。其中一部分负责创建文件,还应该告诉我文件是否成功。如果不是,它也应该通知我,但问题是-它在创建文件之前检查文件是否存在。我试图通过使用时间模块(特别是time.sleep选项,几乎可以在所有位置插入)在文件创建和检查文件是否存在之间进行休息,但是没有结果。我还尝试使用另一种方法来检查文件是否存在。它没有帮助。整个程序工作正常(不包括此部分),因为如果文件已经存在并且我告诉程序创建它,它会告诉我它已成功,因此可以正确读取它,但是速度太快。我在下面附加了部分代码。预先谢谢你。
我尝试使用os模块的第一种方法:
path = 'D:\screen'
os.chdir(path)
exists = os.path.isfile('.\screenshot.png')
exists2 = os.path.isfile('.\screenshot2.png')
这是执行部分:
def printer():
pyautogui.screenshot('D:\SCREEN\screenshot.png')
time.sleep(3)
if exists:
print("Screenshot was created successfully")
else:
print("Screenshot was not created successfully")
def printer2():
pyautogui.screenshot('D:\SCREEN\screenshot2.png')
time.sleep(3)
if exists2:
print ("Screenshot was created successfully")
else:
print ("Screenshot was not created successfully")
我尝试的第二种方法,使用pathlib:
path = 'D:/screen'
file1 = Path("D:/screen/screenshot.png")
file2 = Path("D:/screen/screenshot2.png")
执行部分:
def printer():
pyautogui.screenshot('D:/SCREEN/screenshot.png')
time.sleep(3)
if file1.isfile():
print("Screenshot was created successfully")
else:
print("Screenshot was not created successfully")
def printer2():
pyautogui.screenshot('D:/SCREEN/screenshot2.png')
time.sleep(3)
if file2.isfile():
print("Screenshot was created successfully")
else:
print("Screenshot was not created successfully")
答案 0 :(得分:1)
在创建屏幕快照之前已分配了这些变量(file1
,file2
),因此它们不存在。 screenshot
实际上返回一个PIL图像对象。因此,您甚至可以不使用os
来检查。
def printscreen():
try:
image = pyautogui.screenshot('D:/SCREEN/screenshot.png')
except Exception as e:
print(f'Exception occured during screenshotring {str(e)}')
如果您仍要检查os是否存在,请在屏幕截图之后使用它。
pyautogui.screenshot('D:/SCREEN/screenshot.png')
assert os.file.exist('D:/SCREEN/screenshot.png')
答案 1 :(得分:0)
我不知道pyautogui.screenshot()会做什么,但是在这里:
假设每次尝试的前半部分是在调用打印机函数之前执行的,那么在创建要测试的文件之前,要存储os.path.isfile()的结果。
您还应该为文件夹名称选择一个大小写,实际上它应该在变量中,这样您就不必键入两次。您还应该使用os.path.join而不是键入目录分隔符。
在前半部分的打印机和打印机2中,您应该能够将存在/存在2更改为对os.path.isfile()的调用。
在简单的情况下,这应该起作用:
def printer():
pyautogui.screenshot('D:\screen\screenshot.png') #assume this attempts to create a file
if os.path.isfile('.\screenshot.png'):
print("Screenshot was created successfully")
else:
print("Screenshot was not created successfully")
path = 'D:\screen'
os.chdir(path)
printer()
答案 2 :(得分:0)
欢迎您!
最好检查文件是否存在使用<div class="container-fluid">
<h1 class="mt-4">Liste des contracteurs</h1>
<div class="table-responsive">
<table id="contracteur_data" class="table table-striped table-bordered">
<thead>
<tr>
<td># Contracteur</td>
<td>Description</td>
<td>Options</td>
</tr>
</thead>
<?php
while($row = $SelectContracteurs_Query->fetch()) {
echo '
<tr>
<td>'.$row["idContracteur"].'</td>
<td>'.$row["Description"].'</td>
<td><a href="ContracteurEdit.php?id=' .$row["idContracteur"]. '"><button type="button" class="btn btn-primary">Modifier</button></a></td>
</tr>
';
}
?>
</table>
</div>
</div>
块。代码中的问题是它们是第try/catch
行和os.path.isfile('.\screenshot.png')
行之间的竞争条件部分。
您可以尝试使用以下-
if exists
答案 3 :(得分:0)
感谢您的所有回答。通过使用Zonyl提出的解决方案,我能够解决我的问题。看起来背后的原因是琐碎的(,,这些变量(文件1,文件2)在创建屏幕快照之前已分配” ,,假设每次尝试的前一半是在调用打印机函数之前执行的,则存储os.path.isfile()的结果,然后再创建要测试的文件。”)但我很感谢您仍然帮助了我。我希望以后再有新手会觉得有用。