【问题标题】:How to run jq command in python? [duplicate]如何在python中运行jq命令? [复制]
【发布时间】:2023-04-04 22:42:01
【问题描述】:

我正在关注 bigquery 地理空间指南,我的 json 文件通过 jq 命令进行了更改。特别是这个:

cat ~/file1.json | jq -c '.features[]' > converted.json

我在 python 中运行上面的等价物时遇到了困难。我正在使用 subprocess 模块,但它不起作用。

cmd = ['cat', './sample.json', '|', 'c', '.features[]']

print(subprocess.check_output(cmd))

我得到的输出是这样的:

cat: |: No such file or directory
cat: -c: No such file or directory
cat: .features[]: No such file or directory
Traceback (most recent call last):
  File "/Users/rtom/kml2geo/main.py", line 12, in <module>
    result = subprocess.check_output(cmd)
  File "/Users/rtom/opt/anaconda3/lib/python3.8/subprocess.py", line 415, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/Users/rtom/opt/anaconda3/lib/python3.8/subprocess.py", line 516, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['cat', './sample.json', '|', '-c', '.features[]']' returned non-zero exit status 1.
(base) rtom@Ryans-MacBook-Pro kml2geo %

这里有什么帮助吗?

【问题讨论】:

  • 这里完全没有使用cat的理由,如果你不使用它会容易得多。
  • (当您希望输出直接到文件时,为什么要subprocess.check_output()?)
  • 顺便说一句,在 Python 中,与 subprocess.Popen-family 函数的 stdin=open('filename', 'r') 参数等效的 shell 是使用 &lt;filename;可以在开头也可以在结尾,所以&lt;filename jq ...jq ... &lt;filename 是等价的。

标签:
python
jq