使用子进程将“ jq”输出发送到文件

时间:2019-02-10 13:05:16

标签: python bash subprocess jq

我不太确定jq在这里如何与子进程一起工作,所以有一个误解,但我试图通过在子进程的命令行(jq > file.json)上使用jq来获取精确格式。这就是我所拥有的,但是以下内容会产生一个空文件。

os.makedirs(os.path.dirname(filePath))
open(filePath, 'a').close()

call(["bw", "list", "--session", session_key, \
    "collections", "|", "jq", ".", ">", filePath])

我也尝试过

with open(filePath, "w+") as output:
        call(["bw", "list", "--session", session_key, \
         "collections", "|", "jq", "."], stdout=output)

但是这会产生一个字符串,而不是jq的实际格式。我有办法用python在命令行上将stdout jq获取到文件中吗?

1 个答案:

答案 0 :(得分:1)

没有外壳,您需要两个子进程。

name

这几乎是从documentation.中解脱出来的,尽管在标准库中有一个pipes模块,尽管可以说它很笨重,但在某种程度上简化了它。因此,还有一些第三方替代品。

另一方面,也许这是您可以捍卫os.makedirs(os.path.dirname(filePath)) dst = open(filePath, 'a') p0 = Popen(["bw", "list", "--session", session_key, "collections"], stdout=PIPE, check=True) p1 = Popen(["jq", "."], stdout=dst, stdin=p0.stdout, check=True) p1.communicate() dst.close() 的情况之一。

shell=True

另一方面,如果您真的想要一个shell脚本,为什么还要编写Python?