shell 如何在python中导出一组url

tquggr8v  于 7个月前  发布在  Shell
关注(0)|答案(1)|浏览(60)

我有两个文件名trigger.sh和emp.py在LocalDB文件夹。
在trigger.sh我有

export emp_code='IT'
py /C/Users/LocalDB/emp.py

字符串
在emp.py

import os
from os import listdir
from os.path import is filed,join

_emp_code=os.environ['emp_code']

Emp_url = {
'IT':{'Emp_url':'www.it.com'},
'Prod':{'Emp_url':'www.prod.com'},
'Qa':{'Emp_url':'www.qa.com'}
}[_emp_code]
Print(Emp_url)


当我触发trigger.sh时,我的输出“"*'Emp_url':'www.it.com'**".
现在,我试图在Shell脚本中有这些网址。但我得到一个“无效的标识符”。
下面的代码我已经尝试过:Trigger.sh

export emp_code='IT'
export _emp_url= '
'IT':{'Emp_url':'www.it.com'},
'Prod':{'Emp_url':'www.prod.com'},
'Qa':{'Emp_url':'www.qa.com'}'
py /C/Users/LocalDB/emp.py


emp.py:

import os
from os import listdir
from os.path import is filed,join

_emp_code=os.environ['emp_code']
Emp_url = os.environ ['_emp_url']

Emp_url = {Emp_url}[_emp_code]
Print(Emp_url)


有什么办法解决这个问题吗

zc0qhyus

zc0qhyus1#

现在,我试图在Shell脚本中有这些网址。但我得到一个“无效的标识符”。
当您尝试使用不是有效的shell变量名的字符串执行export时,通常会显示此错误消息。shell不希望shell变量名、=符号和所分配的值之间有空格。export行上空格之后的任何内容都应该是另一个有效的shell变量名,可能后跟=以进行值分配。
在脚本Trigger.sh中,第一行看起来是正确的;第二行是错误的。在第二行中,=之后有一个空格,这使得shell需要一个shell变量名(“标识符”),但接下来是一个字符串,其中包含许多标识符中不允许的字符(多个:{}和换行符)。
在emp.py中,此行

from os.path import is filed,join

字符串
错了,is这个词不应该在这里。

[ ranga ] $ python3
Python 3.9.13
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> from os import listdir
>>> from os.path import is filed,join
  File "<stdin>", line 1
    from os.path import is filed,join
                        ^
SyntaxError: invalid syntax


在这一行之后:

Emp_url = os.environ ['_emp_url']


Emp_url只包含字符串,而不是dict
所以,在这一行:

Emp_url = {Emp_url}[_emp_code]


{Emp_url}创建了一个set,其中包含一个包含整个字符串的条目,然后尝试用_emp_code(另一个字符串)索引它将失败。
Emp_url中的字符串需要转换为dict,然后才能用字符串索引。一种方法是使用json包:

import json
Emp_url = json.loads(os.environ['_emp_url'])


为此,环境变量_emp_url应该包含双引号,而不是单引号。也要只打印URL:

print Emp_url['Emp_url']


在Trigger.sh:

  • 在第2行,删除“=”后面的空格
  • 在第3行和第4行,用双引号替换所有单引号示例
  • 在第5行,用双引号替换除最后一个外的所有单引号示例

所以现在Trigger.sh可以有这样的内容:

export \
  emp_code='IT' \
  _emp_url='{
    "IT":{"Emp_url":"www.it.com"},
    "Prod":{"Emp_url":"www.prod.com"},
    "Qa":{"Emp_url":"www.qa.com"}
  }'
py /C/Users/LocalDB/emp.py


和emp.py可以有这样的东西

import os
import json

_emp_code=os.environ['emp_code']
Emp_urls = json.loads(os.environ ['_emp_url'])

Emp_url = Emp_urls[_emp_code]['Emp_url']
print(Emp_url)


尝试一下:

[ ranga ] $ export \
>   emp_code='IT' \
>   _emp_url='{
>     "IT":{"Emp_url":"www.it.com"},
>     "Prod":{"Emp_url":"www.prod.com"},
>     "Qa":{"Emp_url":"www.qa.com"}
>   }'

[ ranga ] $ python3
Python 3.9.13 
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> import json
>>>
>>> _emp_code=os.environ['emp_code']
>>> Emp_urls = json.loads(os.environ ['_emp_url'])
>>>
>>> Emp_url = Emp_urls[_emp_code]['Emp_url']
>>> print(Emp_url)
www.it.com
>>>

相关问题