有没有一种pythonic方式来读取tcsh csh shell wordlist变量
Is there a pythonic way to read tcsh csh shell wordlist variables
我正在尝试从应用程序输出的 cshell 文件中读取变量。该应用程序假定我们使用 cshell 来读取变量。我正在使用 Python.
该文件包含两个 (T)csh wordlist shell 变量 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', ')']
我希望其他人有比我组装的更优雅的解决方案。
您可以在将括号中的字符串传递给 shlex.split
之前将其提取出来:
import re
shlex.split(re.findall(r'\((.*)\)', line0)[0])
我正在尝试从应用程序输出的 cshell 文件中读取变量。该应用程序假定我们使用 cshell 来读取变量。我正在使用 Python.
该文件包含两个 (T)csh wordlist shell 变量 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', ')']
我希望其他人有比我组装的更优雅的解决方案。
您可以在将括号中的字符串传递给 shlex.split
之前将其提取出来:
import re
shlex.split(re.findall(r'\((.*)\)', line0)[0])