$ query_op=$(ssh -p 29418 myreview-server.com gerrit query --files --current-patch-set --format=JSON --commit-message change:99934 | head -n 1 | python -c "import sys, json; print json.load(sys.stdin)['currentPatchSet']['files']")
$ echo $query_op
[{u'deletions': 0, u'insertions': 11, u'type': u'ADDED', u'file': u'/COMMIT_MSG'}, {u'deletions': 0, u'insertions': 2, u'type': u'MODIFIED', u'file': u'foo/bar/baz/info.txt'}]如何查找是否有以字符串foo开头的file?在上面的例子中,我需要做一些操作,因为有一个以foo/开头的文件是foo/bar/baz/info.txt,如果在整个字典值中没有以foo/开头的文件,那么我需要做不同的操作。
发布于 2018-02-02 07:33:21
正如我所说的,您可以修改Python一行程序来检查foo前缀,而不是打印出整个字典。更改它非常容易,这样Python就可以打印True或False,只需用生成器表达式和any包装当前的json.loads调用
any(x['file'].startswith('foo') for x in json.load(sys.stdin)['currentPatchSet']['files'])另一种可能使在周围的bash脚本中更容易处理输出的选择是使用Python语言中的sys.exit将结果作为Python解释器的退出代码发送,而不是作为文本发送到标准输出。方便的是,Python的bool数据类型是int的子类( True等于1,False等于0),因此可以将上面代码中的any调用的结果直接传递给sys.exit,而不是print。传统上,退出代码0表示成功,而1表示失败,因此您可能需要sys.exit(not any(...))。
https://stackoverflow.com/questions/48531897
复制相似问题