【问题标题】:Capturing output of python code and exporting into a JSON捕获 python 代码的输出并导出为 JSON
【发布时间】:2017-04-06 06:10:08
【问题描述】:

我有一个名为 phone.py 的文件,它给我的输出为(在终端中):

+911234567890
+910123321423

可以有更多的输出。

另一个名为 email.py 的文件生成(在终端中):

and@abc.com
bcd@cdc.com

或更多。

我有一个 JSON 文件,其结构如下:

{"One":"Some data",
 "two":"Some more data",
 "three":"Even more data"}

可以有更多这样的部分。

现在我想要捕获终端输出并加载现有的 JSON,最后得到如下输出(作为 JSON 文件):

{Phone:"+911234567890,+910123321423", "Email":"and@abc.com,bcd@cdc.com","Sections":"{"One":"Some data",
 "two":"Some more data",
 "three":Even more data"}"}

我尝试使用 python 中的 subprocess 模块捕获输出,现在它存储在一个变量中

subprocess.run(['python','email.py','filename.txt'], stdout= subprocess.PIPE)

输出:

CompletedProcess(args=['python', 'email_txt.py', 'upload/filename.txt'], returncode=0, stdout=b'abc@xyz.com\nbcd@dcd.com\n')

我有一个存储数据的字符串,我不希望通过这些组件获得所需的输出。 我可以做什么或参考解决这个问题?

【问题讨论】:

  • 包括您捕获输出的尝试。
  • @AshishNitinPatil- 做过
  • 删除bash标签,因为它不是构造所需JSON的有效方法
  • 生成 "email": ["abc@xyz.com", "bcd@dcd.com"] 似乎是用 JSON 编码的更好方法。
  • 为什么要在子进程中运行 Python? import 脚本并从您自己的脚本中调用其主要功能。这提高了凝聚力和性能。

标签: python json python-2.7 subprocess


【解决方案1】:

您可以通过resp.stdoutsubprocess.run获取标准输出,其中resp是返回的对象。

【讨论】:

  • 也许还提到可选参数universal_newlines=True 也将负责根据默认终端编码解码任何输出。
【解决方案2】:

正如 Rishav 已经提到的,您需要将输出分配给一个变量,然后使用它来获取相关属性。

Sample usage-

>>> import subprocess
>>> out = subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
>>> out.stdout
b'crw-rw-rw- 1 root root 1, 3 Apr  6  2017 /dev/null\n'

【讨论】:

  • 这是作为“字节”类型返回的,我如何将它作为字符串获取?
  • 你可以使用out.stdout.decode('utf-8'),正如stackoverflow.com/a/606199/2689986中提到的那样
猜你喜欢
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
相关资源
最近更新 更多