我有下面的代码,我想通过shell脚本使用python -c
运行:
import json,sys
obj=json.loads(open('/temp/209/209formatted_response.json','r').read())
revision=obj['component']['referencingComponents'][0]['revision']
for element in list(revision):
if 'lastModifier' in element:
del revision['lastModifier']
print(revision)
使用python -c
,它在没有for循环的情况下运行良好,但如果我在其中包含for循环,它会抛出并出错:
以下工作正常:
python -c "import json,sys; obj=json.loads(open('/temp/209/209formatted_response.json','r').read());revision=obj['component']['referencingComponents'][0]['revision']"
以下给出错误:
$ /opt/app/anaconda3/envs/anaconda3/bin/python -c "import json,sys; obj=json.loads(open('/temp/209/209formatted_response.json','r').read());revision=obj['component']['referencingComponents'][0]['revision'];for element in list(revision): if 'lastModifier' in element: del revision['lastModifier']; print(revision)"
File "<string>", line 1
import json,sys; obj=json.loads(open('/temp/209/209formatted_response.json','r').read());revision=obj['component']['referencingComponents'][0]['revision'];for element in list(revision): if 'lastModifier' in element: del revision['lastModifier']; print(revision)
^
SyntaxError: invalid syntax
我甚至尝试在循环;
的每条语句之前使用n
,但没有成功
一种可能的解决方案是使用换行符,但不要直接添加它们:
$ python3 -c "exec("n = 3nfor i in range(n):n print(i)")"
0
1
2
像您所做的那样添加n
,但也通过"exec("...")"
附上代码
或者你可以插入真正的换行符:
$ python3 -c "n = 3
> for i in range(n):
> print(i)"
0
1
2
问题在于缩进,因此您可以使用过滤器函数而不是使用for和if语句
revision = list(filter(lambda x: not 'lastModifier' in x, list(revision)));