Определение команды linux в скрипте python и возможность запуска команды из скрипта

Это простое объединение строки с фиксированным текстом(X Y Z)и части одной строки из одного файла(SummaryX.txt)и всего содержимого другого файла с родственным именем файла(recordX.txt)

#!/bin/sh

for sfile in Summary*.txt; do
  rfile="$(echo "$sfile" | sed -e 's/^Summary/record/')"
  ofile="$rfile.new"

  {
    echo X Y Z

    sed -E -n -e 's/^.*RESULT ([0-9.]+ [0-9.]+ [0-9.]+).*/\1/p' "$sfile"
    echo

    cat "$rfile"
  } > "$ofile"

  # uncomment the following to replace the original record file with the new one.
  # mv -f "$ofile" "$rfile"
done

Вы не указали, какую оболочку вы используете, поэтому здесь не используются какие-либо специфические для bash -манипуляции со строками или другие возможности. Он должен работать с любой оболочкой, совместимой с sh -.

Вывод будет сохранен в recordX.txt.new, если вы не раскомментируете строку mv. Это делается для того, чтобы вы могли убедиться, что он делает то, что вы хотите, до того, как он уничтожит ваши исходные входные файлы, (вы все равно должны работать с резервными копиями, когда делаете что-то потенциально разрушительное ).

$ cat record1.txt.new 
X Y Z
111.114 30.344 90.3454

11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec...
0
30.09.2021, 00:25
1 ответ

Из подпроцесса Документация Python:

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False) Run command with arguments and return its output as a byte string.

If the return code was non-zero it raises a CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute and any output in the output attribute.

Вы можете проверить вывод исходной команды. Исходя из этого, вы либо печатаете no service installed, либо запускаете systemctl --now disable autofs.

import subprocess

try:
    subprocess.check_output(["systemctl", "is-enabled", "autofs"], stderr=subprocess.DEVNULL)
except subprocess.CalledProcessError as e:
    print('no service installed')
else:
    subprocess.run(["systemctl --now disable autofs"])
0
13.10.2021, 08:37

Теги

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