使用subprocess.run从终端读取输出

时间:2018-03-26 13:33:05

标签: python io subprocess

我正在编写一个python字符串来解析来自JSON文件的值,运行一个名为Googler的工具,其中包含一些参数,包括JSON文件中的值,然后将工具的输出保存到一个文件(首选CSV,但那是另一天)。

到目前为止,代码是:

import json
import os
import subprocess
import time

with open("test.json") as json_file:
    json_data = json.load(json_file)
    test = (json_data["search_term1"]["apparel"]["biba"])

#os.system("googler -N -t d1 "+test)  shows the output, but can't write to a file.

result= subprocess.run(["googler", "-N","-t","d1",test], stdout=subprocess.PIPE, universal_newlines=True)
print(result.stdout)

当我运行上面的脚本时,没有任何反应,终端只是空白,直到我发送键盘中断,然后我收到此错误:

Traceback (most recent call last):
  File "script.py", line 12, in <module>
    result= subprocess.run(["googler", "-N","-t","d1",test], stdout=subprocess.PIPE, universal_newlines=True)
  File "/usr/lib/python3.5/subprocess.py", line 695, in run
    stdout, stderr = process.communicate(input, timeout=timeout)
  File "/usr/lib/python3.5/subprocess.py", line 1059, in communicate
    stdout = self.stdout.read()
KeyboardInterrupt

我尝试用字符串替换test变量,同样的错误。同一行适用于"ls", "-l", "/dev/null"

之类的内容

如何提取此工具的输出并将其写入文件?

1 个答案:

答案 0 :(得分:1)

您的googler命令在交互模式下工作。它永远不会退出,所以你的程序会被卡住。

您希望googler运行搜索,打印输出然后退出。

从文档中,我认为--np(或--noprompt)是正确的参数。我没有测试过。

result = subprocess.run(["googler", "-N", "-t", "d1", "--np", test], stdout=subprocess.PIPE, universal_newlines=True)