我有一个创建“Test”对象的类 - 一个基于(描述)外部测试脚本的对象。
可以在此处找到代码:https://codeshare.io/5zlW0W
我像这样使用这个类:
from test import Test
test = Test("/path/to/test")
当测试文件存在时,这非常有效,但是当它不存在时我遇到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/repos/test.py", line 13, in __init__
self.version = self.get_attribute("version")
File "/home/user/repos/test.py", line 33, in get_attribute
p = subprocess.Popen([self.path, '--' + attribute], stdout=subprocess.PIPE, universal_newlines=True)
File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'bla'
所以我的问题分为两部分:
__init__
中所做的那样?答案 0 :(得分:3)
使用get_attribute
os.path.exists(file_path)
方法中存在的文件
def get_attribute(self, attribute):
"""Return a given attribute of the test.
Runs a test subprocess with the --<attribute> argument.
"""
if os.path.exists(self.path):
p = subprocess.Popen([self.path, '--' + attribute], stdout=subprocess.PIPE, universal_newlines=True)
attr = p.stdout.read().strip("\n")
return attr
答案 1 :(得分:0)
您始终可以使用标准操作系统库。
import os
from test import Test
if os.path.exists("/path/to/test"):
test = Test("/path/to/test")
如果您还希望确保文件不为空,则可以使用
if os.stat("/path/to/test").st_size > 0:
注意这可能会导致竞争条件:
关于此事的一个好问题可以在这里找到: How does using the try statement avoid a race condition?