Вот мой вариант, предполагая, что период задается датами start
и end
let quarter: TimeInterval = 15 * 60
let dateInterval = DateInterval(start: start, end: end)
var date = start
var result = [Date]()
while dateInterval.contains(date) {
result.append(date)
date = date.addingTimeInterval(quarter)
}
. Вы слишком опаздываете. К тому времени, когда введенная команда добирается до Python, Ваша оболочка уже работала свое волшебство. Например, кавычки используются (как Вы заметили), переменные интерполированы, и т.д.
В среде Unix это не обычно возможно... лучшее, на которое можно надеяться, командная строка, как передано процессу.
, поскольку оболочка (по существу любой оболочка) может munge введенная командная строка несколькими способами прежде, чем вручить его ОС для выполнения.
начальное расположение стека (Linux на i386), который обеспечивает доступ к командной строке и среде программы : процесс видит только отдельные аргументы.
Вы не можете получить командную строку , поскольку она была введена в общем случае. На Unix оболочка анализирует командную строку в отдельные аргументы и в конечном счете execv(path, argv)
функция, которая вызывает соответствующий syscall, назван. sys.argv
получен от argv
, параметр передал эти execve()
функция. Вы могли получить что-то эквивалентное использование " ".join(map(pipes.quote, argv))
, хотя Вы не должны должны быть, например, если Вы хотите перезапустить сценарий с немного отличающимися параметрами командной строки тогда sys.argv
, достаточно ( во многих случаях ), см. , это возможный установить Python-O (оптимизируют) флаг в рамках сценария?
существуют некоторые творческие (непрактические) решения:
On Windows собственный компонент CreateProcess()
интерфейс является строкой, но python.exe все еще получает аргументы как список. subprocess.list2cmdline(sys.argv)
мог бы помочь инвертировать процесс. list2cmdline
разработан для приложений с помощью [1 116] те же правила в качестве MS C время выполнения , — python.exe
является одним из них. list2cmdline
не возвращает командную строку , поскольку она была введена , но она возвращает функциональный эквивалент в этом случае.
На Python 2, Вам, возможно, понадобилось бы GetCommandLineW()
, для получения символов Unicode от командной строки, которая не может быть представлена в кодовой странице Windows ANSI (такой как cp1252).
Как упомянуто, это, вероятно, не может быть сделано, по крайней мере, не надежно. В нескольких случаях Вы могли бы быть в состоянии найти файл истории для оболочки (например, - "удар", но не "tcsh") и получить ввод пользователя от этого. Я не знаю, сколько, если таковые имеются, управление Вы имеете по среде пользователя.
Если бы Вы находитесь на Linux, я предложил бы monkeying с ~/.bash_history
файл или оболочка history
команда, хотя я полагаю, что команда должна закончить выполняться, прежде чем это будет добавлено к истории оболочки.
я начал играть с:
import popen2
x,y = popen2.popen4("tail ~/.bash_history")
print x.readlines()
, Но я становлюсь странным поведение, где оболочка, кажется, полностью не сбрасывает к .bash_history
файл.
На Linux существует /proc/<pid>/cmdline
, который находится в формате argv[]
(т.е. существует 0x00 между всеми строками, и Вы не можете действительно знать, сколько там - строки, так как Вы не получаете argc; хотя Вы будете знать это, когда файл исчерпает данные;).
можно быть уверены, что та командная строка уже портится также, так как все заполнение выхода/переменной сделано, и параметры приятно упаковываются (никакие дополнительные пространства между параметрами, и т.д.).