Я думаю, вы могли бы использовать TIMESTAMPDIFF (unit, datetime_expr1, datetime_expr2) что-то вроде
select * from MyTab T where
TIMESTAMPDIFF(MINUTE,T.runTime,NOW()) > 20
Я всегда использую:
__location__ = os.path.realpath(
os.path.join(os.getcwd(), os.path.dirname(__file__)))
вызов join()
добавляет текущий рабочий каталог, но в документации говорится, что если какой-то путь является абсолютным, все остальные пути, оставшиеся от него, будут удалены. Поэтому getcwd()
отбрасывается, когда dirname(__file__)
возвращает абсолютный путь.
Кроме того, вызов realpath
разрешает символические ссылки, если они найдены. Это позволяет избежать проблем при развертывании с помощью setuptools в системах Linux (сценарии привязаны к /usr/bin/
- по крайней мере, на Debian).
Вы можете использовать следующее для открытия файлов в одной папке:
f = open(os.path.join(__location__, 'bundled-resource.jpg'));
# ...
Я использую это для объединения ресурсов с несколькими приложениями Django как в Windows, так и в Linux, и он работает как прелесть!
Я бы сделал это следующим образом:
from os.path import abspath, exists
f_path = abspath("fooabar.txt")
if exists(f_path):
with open(f_path) as f:
print f.read()
Вышеприведенный код строит абсолютный путь к файлу с помощью abspath и эквивалентен использованию normpath(join(os.getcwd(), path))
[это от пидоков]. Затем он проверяет, существует ли этот файл на самом деле , а затем использует диспетчер контекстов для его открытия, поэтому вам не нужно забывать, чтобы закрыть связь с дескриптором файла. ИМХО, делая это таким образом, в долгосрочной перспективе сэкономит вам много боли.
os.path.abspath
не разрешает пути к файлам в той же папке, что и скрипт, если скрипт не находится в текущем каталоге.
– André Caron
30 October 2010 в 20:35
Для цитирования из документации Python:
Как инициализировано при запуске программы, первым элементом этого списка является путь [0], это каталог, содержащий скрипт, который использовался для вызова Python-интерпретатор. Если каталог сценария недоступен (например, если интерпретатор вызывается интерактивно или если скрипт считывается со стандартного ввода), путь [0] - это пустая строка, которая сначала направляет Python на поиск модулей в текущем каталоге. Обратите внимание, что каталог сценариев вставлен перед вставками в результате PYTHONPATH.
blockquote>sys.path [0] - это то, что вы ищете.
os.path.join(sys.path[0], 'some file.txt')
. Это должно корректно обрабатывать пробелы и косые черты во всех системах.
– P1h3r1e3d13
13 September 2016 в 04:00
Хорошо, вот что я делаю.
sys.argv всегда то, что вы вводите в терминал или используете в качестве пути к файлу при выполнении его с помощью python.exe или pythonw.exe
Например, вы можете запустить файл text.py несколькими способами, каждый из них даст вам другой ответ, который всегда дает вам путь, на который был набран python.
C:\Documents and Settings\Admin>python test.py
sys.argv[0]: test.py
C:\Documents and Settings\Admin>python "C:\Documents and Settings\Admin\test.py"
sys.argv[0]: C:\Documents and Settings\Admin\test.py
Хорошо, вы знаете, что можете получить файл имя, большое дело, теперь, чтобы получить каталог приложений, который вы можете знать, используйте os.path, а именно abspath и dirname
import sys, os
print os.path.dirname(os.path.abspath(sys.argv[0]))
. Это выведет это:
C:\Documents and Settings\Admin\
it всегда будет выводить это независимо от того, вводите ли вы python test.py или python «C: \ Documents and Settings \ Admin \ test.py»
Проблема с использованием __file__ Рассмотрим эти два файла test.py
import sys
import os
def paths():
print "__file__: %s" % __file__
print "sys.argv: %s" % sys.argv[0]
a_f = os.path.abspath(__file__)
a_s = os.path.abspath(sys.argv[0])
print "abs __file__: %s" % a_f
print "abs sys.argv: %s" % a_s
if __name__ == "__main__":
paths()
import_test.py
import test
import sys
test.paths()
print "--------"
print __file__
print sys.argv[0]
Вывод «python test.py»
C:\Documents and Settings\Admin>python test.py
__file__: test.py
sys.argv: test.py
abs __file__: C:\Documents and Settings\Admin\test.py
abs sys.argv: C:\Documents and Settings\Admin\test.py
Вывод «python test_import.py»
C:\Documents and Settings\Admin>python test_import.py
__file__: C:\Documents and Settings\Admin\test.pyc
sys.argv: test_import.py
abs __file__: C:\Documents and Settings\Admin\test.pyc
abs sys.argv: C:\Documents and Settings\Admin\test_import.py
--------
test_import.py
test_import.py
Так как вы можете видеть файл, вы всегда получаете файл python, из которого он запускается, где sys.argv [0] дает вам файл, который вы использовали из интерпретации всегда. В зависимости от ваших потребностей вам нужно будет выбрать, какой из них лучше всего подходит вашим потребностям.
__file__
является Предполагаемый i>, чтобы всегда указывать путь к текущему файлу & quot ;, а sys.argv[0]
- это Предполагаемый i>, чтобы всегда указывать путь к сценарию, который инициировал процесс ". В любом случае использование __file__
в скрипте, который вызывается, всегда дает вам точные результаты.
– André Caron
31 October 2010 в 02:06
__file__
на верхнем уровне скрипта, он будет работать так, как ожидалось.
– Matthew Schinckel
13 April 2012 в 02:20
__file__
не может быть использован, используйтеsys.argv[0]
вместоdirname(__file__)
. Остальное должно работать так, как ожидалось. Мне нравится использовать__file__
, потому что в коде библиотекиsys.argv[0]
может вообще не указывать на ваш код, особенно если он импортируется через какой-то сторонний скрипт. – André Caron 30 October 2010 в 20:17realpath( join( getcwd(), dirname(__file__) ))
, как описано здесь? – pianoJames 18 December 2017 в 17:45