【问题标题】:Reading output from terminal using subprocess.run使用 subprocess.run 从终端读取输出
【发布时间】:2018-03-26 13:33:04
【问题描述】:

我正在编写一个 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"

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

【问题讨论】:

    标签: python io subprocess


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,它确实解决了我的问题。我将代码更改为使用 Popen 而不是 run 因为我需要使用 kill() 函数。无论如何,关于如何将其写入文件的任何想法?
    • 太好了,那么您可以接受/支持答案。写入文件是另一个问题。它应该是教科书的例子。如果您无法通过文档解决问题,请提出一个新问题。
    猜你喜欢
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多