чтение вывода в переменные внутри команды os.system

С zsh:

newname=${${fname//:pear:}:-nullfile}

С bash или ksh93, вы должны сделать это в два этапа:

newname=${fname//:pear:}
newname=${newname:-nullfile}

Согласно POSIX, чтобы удалить все вхождения строки, вы должны сделать это так:

newname=$(
  printf '%s\n' "$fname" | sed 's/:pear://g'; echo .
)
newname=${newname%??}
newname=${newname:-nullfile}

Вы можете упростить это до:

newname=$(
  printf '%s\n' "$fname" | sed 's/:pear://g'
)
newname=${newname:-nullfile}

Если вы можете гарантировать, что $fname не заканчивается символами новой строки.

-1
08.02.2018, 08:54
1 ответ

<(...)— это синтаксис ksh, также распознаваемый zshи bash, хотя при использовании в качестве цели перенаправления он поддерживается только zshи bash.

В любом случае, это не shсинтаксис. Python os.system()и os.popen()запускают shдля интерпретации данной командной строки. И каждый вызов этих команд запускает новую оболочку, поэтому одна переменная, определенная в одной, не будет доступна при следующем вызове оболочки. Также pythonпеременные не становятся переменными оболочки автоматически.

Здесь можно сделать:

os.system("""
  sar -u 1 1 |
    awk -v t="$(date +%m-%d-%y-%T)" -v OFS=, '
      NR==4 {
        print t, $4, $5, $6, $7, $8, $9
      }' > outputfile.txt""")

Хотя выглядит глупо вызывать dateиawk(или даже оболочку )изнутри python, в то время как pythonвполне способен сам выполнять свою работу.

2
28.01.2020, 05:08

Теги

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