Касание реализации использование Python?

Вам необходимо обновить конфигурацию с помощью соответствующих отображений, содержащих полные имена классов или подстановочные знаки:

<hibernate-configuration>
 <session-factory>
  ...
  <mapping class="com.mypackage.Category" />
 </session-factory>
</hibernate-configuration>
298
задан 7 revs, 2 users 87% 30 June 2012 в 18:52
поделиться

5 ответов

Почему не делают Вы пробуете: newfile.py

#!/usr/bin/env python
import sys
inputfile = sys.argv[1]

with open(inputfile, 'w') as file:
    pass

python newfile.py foobar.txt

или

подпроцесс использования:

import subprocess
subprocess.call(["touch", "barfoo.txt"])
1
ответ дан 23 November 2019 в 01:31
поделиться
def touch(fname):
    if os.path.exists(fname):
        os.utime(fname, None)
    else:
        open(fname, 'a').close()
40
ответ дан 23 November 2019 в 01:31
поделиться

Упрощенно:

def touch(fname):
    open(fname, 'a').close()
    os.utime(fname, None)
  • open гарантирует, что там есть файл
  • utime гарантирует, что метки времени обновляются

Теоретически , возможно, кто-то удалит файл после open , в результате чего utime вызовет исключение. Но, пожалуй, это нормально, раз уж случилось что-то плохое.

3
ответ дан 23 November 2019 в 01:31
поделиться

Сложный (возможно, с ошибками):

def utime(fname, atime=None, mtime=None)
    if type(atime) is tuple:
        atime, mtime = atime

    if atime is None or mtime is None:
        statinfo = os.stat(fname)
        if atime is None:
            atime = statinfo.st_atime
        if mtime is None:
            mtime = statinfo.st_mtime

    os.utime(fname, (atime, mtime))


def touch(fname, atime=None, mtime=None):
    if type(atime) is tuple:
        atime, mtime = atime

    open(fname, 'a').close()
    utime(fname, atime, mtime)

Это также пытается разрешить установку времени доступа или модификации, как GNU touch.

1
ответ дан 23 November 2019 в 01:31
поделиться

Это пытается быть немного более свободным от гонок, чем другие решения. (Ключевое слово with является новым в Python 2.5.)

import os
def touch(fname, times=None):
    with open(fname, 'a'):
        os.utime(fname, times)

Примерно эквивалентно этому.

import os
def touch(fname, times=None):
    fhandle = open(fname, 'a')
    try:
        os.utime(fname, times)
    finally:
        fhandle.close()

Теперь, чтобы действительно избавиться от гонки, вам нужно использовать futimes и изменить метку времени открытого дескриптора файла вместо того, чтобы открывать файл и затем изменять метку времени в имени файла (которое могло быть переименовано). К сожалению, Python, похоже, не предоставляет способ вызвать futimes без прохождения через ctypes или аналогичные ...


EDIT

Как отметил Нейт Парсонс , Python 3.3 добавит , определяющий дескриптор файла (когда os.supports_fd ), к таким функциям, как os.utime , который будет использовать системный вызов futimes вместо системного вызова utimes под капотом. Другими словами:

import os
def touch(fname, mode=0o666, dir_fd=None, **kwargs):
    flags = os.O_CREAT | os.O_APPEND
    with os.fdopen(os.open(fname, flags=flags, mode=mode, dir_fd=dir_fd)) as f:
        os.utime(f.fileno() if os.utime in os.supports_fd else fname,
            dir_fd=None if os.supports_fd else dir_fd, **kwargs)
234
ответ дан 23 November 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: