File: //lib/python3.9/site-packages/tuned/plugins/__pycache__/plugin_script.cpython-39.opt-1.pyc
a
,�g� � @ sX d dl mZ ddlmZ d dlZd dlZd dlmZm Z ej
�� ZG dd� dej
�ZdS )� N� )�base)�Popen�PIPEc sb e Zd ZdZedd� �Zdd� Zdd� Zdd � Z� fd
d�Z � fdd
�Z
ejf� fdd� Z
� ZS )�ScriptPlugina;
Executes an external script or binary when the profile is loaded or
unloaded. You can choose an arbitrary executable.
IMPORTANT: The `script` plug-in is provided mainly for compatibility
with earlier releases. Prefer other *TuneD* plug-ins if they cover
the required functionality.
*TuneD* calls the executable with one of the following arguments:
* `start` when loading the profile
* `stop` when unloading the profile
You need to correctly implement the `stop` action in your executable
and revert all settings that you changed during the `start`
action. Otherwise, the roll-back step after changing your *TuneD*
profile will not work.
Bash scripts can import the [filename]`/usr/lib/tuned/functions`
Bash library and use the functions defined there. Use these
functions only for functionality that is not natively provided
by *TuneD*. If a function name starts with an underscore, such as
`_wifi_set_power_level`, consider the function private and do not
use it in your scripts, because it might change in the future.
Specify the path to the executable using the `script` parameter in
the plug-in configuration.
.Running a Bash script from a profile
====
To run a Bash script named `script.sh` that is located in the profile
directory, use:
----
[script]
script=${i:PROFILE_DIR}/script.sh
----
====
c C s dd iS )N�script� )�selfr r �?/usr/lib/python3.9/site-packages/tuned/plugins/plugin_script.py�_get_config_options1 s �z ScriptPlugin._get_config_optionsc C s2 d|_ d|_|jd d ur(|jd |_ng |_d S )NTFr )Z_has_static_tuningZ_has_dynamic_tuning�options�_scripts�r �instancer r r
�_instance_init7 s
zScriptPlugin._instance_initc C s d S )Nr r r r r
�_instance_cleanupA s zScriptPlugin._instance_cleanupc
C s. d}|D �]}t j}|�| j�� � | �|�sBt�dd| � qt�d|t |�f � t�
dt t|�� �� � ztt
|g| ttd|dt j�|�d�}|�� \}}t|�r�t�d||d d� f � |jr�t�d ||jf � d
}W q ttf�y& } z"t�d|| f � d
}W Y d } ~ qd } ~ 0 0 q|S )NTzGPaths outside of the profile directories cannot be used in the script, zignoring script: '%s'.z'calling script '%s' with arguments '%s'zusing environment '%s')�stdout�stderrZ close_fds�envZuniversal_newlines�cwdzscript '%s' error output: '%s'���z#script '%s' returned error code: %dFzscript '%s' error: %s)�os�environ�updateZ
_variablesZget_envZ_safe_script_path�log�error�info�str�debug�list�itemsr r �path�dirnameZcommunicate�len�
returncode�OSError�IOError)
r ZscriptsZ arguments�retr r �proc�out�err�er r r
�
_call_scriptsD s8
�
�zScriptPlugin._call_scriptsc s$ t t| ��|� | �|jdg� d S )N�start)�superr �_instance_apply_staticr, r
r �� __class__r r
r/ ` s z#ScriptPlugin._instance_apply_staticc st d}t t| ��|||�dkr d}dg}|r4|dg7 }| �|j|�dkrZt�tj|j � nt� tj
|j � d}|S )NTFZverify�ignore_missing)r. r �_instance_verify_staticr, r
r r �constsZSTR_VERIFY_PROFILE_OKr ZSTR_VERIFY_PROFILE_FAIL)r r r2 Zdevicesr'