Есть ли pythoni c способ чтения t csh csh переменных списка слов оболочки - PullRequest
2 голосов
/ 27 марта 2020

Я пытаюсь прочитать переменные из файла cshell, выводимого приложением. Приложение предполагает, что мы используем cshell для чтения переменных. Я использую Python.
Файл содержит две (T) csh переменные оболочки списка слов lnPARAM и lnVAL;

set lnPARAM = ('path' 'job' 'delete_source'                      )
set lnVAL   = ('/opt/genesis/fw/jobs/48039/input' '48039' 'no'   )

Я хотел бы создать переменные для пути, задания и delete_source со строками '/ opt / ..', '48039' и 'no'.
Я разбил строки на список;

>>> line0 = "set lnPARAM = ('path' 'job' 'delete_source'  )"
>>> line1 = "set lnVAL   = ('/opt/genesis/fw/jobs/48039/input' '48039' 'no' )"
>>> ln_param = [value.strip("'") for value in line0.split(' = ')[1].lstrip('(').rstrip(')').split(' ') if value != '']
>>> ln_val = [value.strip("'") for value in line1.split(' = ')[1].lstrip('(').rstrip(')').split(' ') if value != '']
>>> r = dict(zip(ln_param, ln_val))
>>> r['path']
'/opt/genesis/fw/jobs/48039/input'

shlex, похоже, не является решением.

>>>import shlex
>>> shlex.split(line0)
['set', 'lnPARAM', '=', '(path', 'job', 'delete_source', ')']

Я надеюсь, что у кого-то есть более элегантное решение, чем то, которое я собрал.

1 Ответ

1 голос
/ 27 марта 2020

Вы можете извлечь строку, заключенную в скобки, прежде чем передать ее в shlex.split:

import re
shlex.split(re.findall(r'\((.*)\)', line0)[0])
...