使用控制台命令模式实现 for 循环"python -c"



我有下面的代码,我想通过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)));

最新更新