Если вы действительно хотите, это можно сделать, используя applymap
и zip
.
a, b = map(list, zip(*df.applymap(lambda x: (x, )).values.tolist()))
a = list(map(tuple, [a_[0] for a_ in a]))
a
# [('h', 'j', '1', '2', '3', '4'),
# ('g', 'u', '0', '9', '9', '8'),
# ('i', 'u', '5', '6', '7', '8'),
# ('5', '6', 'h', '7', '8', '1')]
b
# [(2,), (5,), (7,), (11,)]
Другой вариант - просто обрабатывать каждый столбец отдельно.
a = list(map(tuple, df['Input']))
b = [(x, ) for x in df['Output']]
a
# [('h', 'j', '1', '2', '3', '4'),
# ('g', 'u', '0', '9', '9', '8'),
# ('i', 'u', '5', '6', '7', '8'),
# ('5', '6', 'h', '7', '8', '1')]
b
# [(2,), (5,), (7,), (11,)]
Существует несколько способов сделать это. Если только необходимо отследить создание процесса, прибывающее из определенной программы (или несколько программ), метод EasyHook/Detours, упомянутый здесь, будет работать вполне прилично, но эффективно необходимо установить рычаг на CreateProcess в каждую программу, таким образом, это не отличное решение, если Вы хотите отследить все создание процесса в системе.
Существует определенный API для этого в основанных на NT вариантах Windows (NT/2000/XP/Vista) назван PsSetCreateProcessNotifyRoutine (). К сожалению, можно только вызвать эту функцию от ring0, таким образом, это должно быть сделано в драйвере. Существует удобное объяснение (и код) в этой статье CodeProject: http://www.codeproject.com/KB/threads/procmon.aspx.
AFAIK, это - просто уведомление и отдельно не позволяет Вам говорить систему, должен ли процесс быть создан или нет. Однако, если бы необходимо было сделать это, то Вы могли бы приостановить процесс (например, путем присоединения к нему как отладчик), в то время как код решает, уничтожить ли его или нет.
Необходимо проверить easyhook-continuing-detours проект, который является портом.NET проекта Microsoft Detours. Это позволит Вам сцеплять неуправляемые API (такие как CreateProcess). Проверьте примеры кода для простой подобной FileMon программы здесь.
Можно узнать, когда процессы запускаются через использование потребителя ETW в реальном времени - однако, чтобы смочь принять некоторые меры, которые могли возможно отменить процесс от запуска, необходимо будет сделать что-то теневое / недокументированный, как сцепление CreateProcess или использование драйвера фильтра ядра для блокирования чтений к EXE.
Просто используйте уведомления о создании процесса. Это включено в Windows. Вы ничего не должны сцеплять.