我似乎无法获取正在pytest测试的当前文件的文件路径。
例如,考虑以下目录结构:
devops_scripts
├── devops_utilities
│ ├── backupMonthly.py
│ ├── generateAnsibleINI.py
│ └── tests
│ └── test_backup.txt
├── monitoring
│ ├── analyizeCatalinaLog.py
│ ├── fetchCatalinaLogs.py
│ └── getaccountcredit.py
├── pi_provisioning
│ ├── piImageMake.sh
│ ├── piImageRead.sh
│ └── piImageSquashSd.py
└── script_utilities
├── README.md
├── __init__.py
├── execute.py
├── path_handling.py
├── sql_handling.py
└── tests
├── sourcedirfortests
│ ├── file1.txt
│ └── file2.txt
├── test_ansible.txt
└── test_execute.txt
如果我从顶层运行
pytest
,它会进入测试test_execute.txt
。当test_execute.txt
正在测试时,我如何获取文件路径?(我可以通过os.path.abspath('.')
获取rootdir
,但那不是我需要的)(我需要能够设置这些路径以便在
file1.txt
和file2.txt
上测试某些执行内容。我还需要让它在任何嵌套深度的情况下都能正常工作。)我对设置特定的临时测试目录并将其删除等操作不是很感兴趣。我只需要正在测试的文件的路径。我尝试过以下方法:
>>> print os.path.abspath(__file__)
但只会产生如下结果:UNEXPECTED EXCEPTION: NameError("name '__file__' is not defined",)
我甚至可以访问py.test中的一些内部函数/对象
(我应该补充说明,我需要这在Python 2.7和Python 3.x中都能工作)
os.path.abspath(__file__)
对我来说可以正常解析。 - Stephen Rauch__file__
只在实际的 Python 文件中起作用,而不在交互式 shell 中。 - Lie Ryan__file__
在Py2和Py3之间发生了变化吗? - Stephen Rauch================== FAILURES ========== __________ [doctest] test_execute.txt _________ 006 >>> import sys 007 >>> print(os.path.abspath(__file__)) UNEXPECTED EXCEPTION: NameError("name 'file' is not defined") Traceback (most recent call last): File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/doctest.py", line 1329, in run compileflags, 1), test.globs) File "<doctest test_execute.txt[6]>", line 1, in <module> NameError: name '__file' is not defined
- Jason Harris