我不太确定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获取到文件中吗?
答案 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?