Да, возможно, но это немного сложно, вы должны:
format
значение d
(или dd
) maxViewMode
значение 0
(minViewMode
по умолчанию 0
) .datepicker-days
, а prev и next находятся внутри таблицы .datepicker-days
, и они имеют .prev
и .next
, имя месяца находится в одной таблице и имеет класс .datepicker-switch
defaultViewDate
, когда выбраны год и месяц (см. changeDate
событие) Поскольку у сборщика нет метода настройки для defaultViewDate
, вы можете destroy
, а затем перезапустите его. Здесь полный рабочий образец:
$(document).ready(function() {
var dateOpt = {
format: 'dd',
maxViewMode: 0
};
$("#year").datepicker({
format: "yyyy",
viewMode: "years",
minViewMode: "years"
}).on('changeDate', function(e) {
var month = $('#month').datepicker('getDate');
if( !month ){
month = new Date();
}
dateOpt.defaultViewDate = {
year: e.date.getFullYear(),
month: month.getMonth(),
day: 1
};
// Reset date datepicker
$('#date').datepicker('destroy');
// Re-init with defaultViewDate option
$('#date').datepicker(dateOpt);
});
$("#month").datepicker({
format: "mm",
viewMode: "months",
minViewMode: "months",
maxViewMode: 0
}).on('changeDate', function(e) {
var year = $('#year').datepicker('getDate');
if( !year ){
year = new Date();
}
dateOpt.defaultViewDate = {
year: year.getFullYear(),
month: e.date.getMonth(),
day: 1
};
$('#date').datepicker('destroy');
$('#date').datepicker(dateOpt);
});
$("#date").datepicker(dateOpt)
});
/* Hide prev/next buttons and month name*/
.datepicker-days>table>thead>tr>th.prev,
.datepicker-days>table>thead>tr>th.datepicker-switch,
.datepicker-days>table>thead>tr>th.next {
display: none;
}
/* Hide days of previous month */
td.old.day{
visibility: hidden;
}
/* Hide days of next month */
td.new.day{
display: none;
}
Вы можете получить код ошибки и результаты из возбужденного исключения.
Это можно сделать с помощью полей returncode
и output
.
Например:
import subprocess
try:
grepOut = subprocess.check_output("grep " + "test" + " tmp", shell=True)
except subprocess.CalledProcessError as grepexc:
print "error code", grepexc.returncode, grepexc.output
есть способ получить код возврата без try / except?
blockquote>
check_output
вызывает исключение, если он получает ненулевой статус выхода, поскольку он часто означает, что команда не удалась.grep
может возвращать ненулевой статус выхода, даже если нет ошибки - вы могли бы использовать.communicate()
в этом случае:from subprocess import Popen, PIPE pattern, filename = 'test', 'tmp' p = Popen(['grep', pattern, filename], stdin=PIPE, stdout=PIPE, stderr=PIPE, bufsize=-1) output, error = p.communicate() if p.returncode == 0: print('%r is found in %s: %r' % (pattern, filename, output)) elif p.returncode == 1: print('%r is NOT found in %s: %r' % (pattern, filename, output)) else: assert p.returncode > 1 print('error occurred: %r' % (error,))
Вам не нужно вызывать внешнюю команду для фильтрации линии, вы можете сделать это в чистом Python:
with open('tmp') as file: for line in file: if 'test' in line: print line,
Если вам не нужен вывод; вы можете использовать
subprocess.call()
:import os from subprocess import call try: from subprocess import DEVNULL # Python 3 except ImportError: # Python 2 DEVNULL = open(os.devnull, 'r+b', 0) returncode = call(['grep', 'test', 'tmp'], stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL)
Python 3.5 ввел метод subprocess.run()
. Подпись выглядит так:
subprocess.run(
args,
*,
stdin=None,
input=None,
stdout=None,
stderr=None,
shell=False,
timeout=None,
check=False
)
Возвращаемым результатом является subprocess.CompletedProcess
. В 3.5 вы можете получить доступ к args
, returncode
, stdout
и stderr
из выполненного процесса.
Пример:
>>> result = subprocess.run(['ls', '/tmp'], stdout=subprocess.DEVNULL)
>>> result.returncode
0
>>> result = subprocess.run(['ls', '/nonexistent'], stderr=subprocess.DEVNULL)
>>> result.returncode
2