Плохая многоядерная -производительность с qemu, arch linux и Windows 10

Трюк для использования LD_LIBRARY_PATHс python в строке#!(shebang ), который не зависит ни от чего, кроме оболочки, и работает на славу:

#!/bin/sh
'''' 2>/dev/null; exec /usr/bin/env LD_LIBRARY_PATH=. python -x "$0" "$@" #'''

__doc__ = 'A great module docstring'

Как объяснялось в другом месте на этой странице, некоторые оболочки, такие как sh, могут принимать скрипт на свой стандартный ввод.

Сценарий, который мы даем sh, пытается выполнить команду '''', которая упрощается до''(пустой строки )с помощью shи, конечно же, не может выполнить ее, так как нет ''Команда, поэтому она обычно выводит line 2: command not foundв стандартном дескрипторе ошибки, но мы перенаправляем это сообщение с помощью 2>/dev/nullв ближайшую черную дыру, потому что это было бы беспорядочно и запутанно для пользователя, если бы shотображало его.

Затем мы переходим к интересующей нас команде :exec, которая заменяет текущий процесс оболочки следующим, в нашем случае:/usr/bin/env pythonс соответствующими параметрами:

  • "$0", чтобы сообщить Python, какой скрипт он должен открыть и интерпретировать, а также установитьsys.argv[0]
  • "$@", чтобы установить sys.argv[1:]Python для аргументов, переданных в командной строке скрипта.

И мы также просим envустановить переменную окружения LD_LIBRARY_PATH, которая является единственной целью взлома.

Команда оболочки заканчивается комментарием, начинающимся с #, поэтому оболочка игнорирует завершающие тройные кавычки '''.

Затем

shзаменяется новым блестящим экземпляром интерпретатора Python, который открывает и читает исходный скрипт Python, заданный в качестве первого аргумента (на"$0").

Python открывает файл и пропускает первую строку исходного кода благодаря аргументу -x. Примечание :это также работает без -x, потому что для Python шебанг — это просто комментарий .

Затем Python интерпретирует вторую строку как строку документации для текущего файла модуля, поэтому, если вам нужна корректная строка документации модуля, просто установите __doc__в первую очередь в вашей программе Python, как в примере выше.

0
22.09.2016, 04:49
1 ответ

Я обновился до QEMU версии 2.7.50, и теперь Windows 10 (Anniversary edition) регистрирует указанные мной сокеты, ядра и потоки.

1
28.01.2020, 04:49

Теги

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