【问题标题】:subprocess.run not able to print output of multiple lines in a file [duplicate]subprocess.run 无法打印文件中多行的输出[重复]
【发布时间】:2019-05-20 13:27:23
【问题描述】:

我正在使用 subprocess.run 运行命令并将输出打印到文件。

我能够为“python --version”打印正确的输出,因为答案是“Python 3.6.5”,但是当我为“java -version”运行相同的命令时,文本文件中没有输出,但是它反映在控制台中。

可能是因为'java -version'的输出分布在三行!

import subprocess
import os
import sys
sys.stdout = open('outputCS.txt','wt')

result = subprocess.run('python --version', stdout=subprocess.PIPE)
print(result.stdout.decode('utf-8'))

【问题讨论】:

  • java -version 输出到标准错误,而不是标准输出。
  • @interjay 是的,在这种情况下,您需要将stderr=subprocess.PIPE 作为参数添加到subprocess.run() 以捕获它。之后您可以使用result.stderr.decode('utf-8') 访问它,就像您目前使用stdout 所做的一样
  • 解决了这个问题..谢谢!! @GreenCloakGuy

标签: python python-3.x


【解决方案1】:
import subprocess

f = open("stuff", "wt")
subprocess.run(['python', '--version'], stdout=f, stderr=f)
subprocess.run(['java', '-version'], stdout=f, stderr=f)

【讨论】:

  • 我不能使用 'with' 循环,因为我有其他方法正在使用这一行: sys.stdout = open('outputCS.txt','wt') 作为打开文件的全局参数写输出。
  • 我没有使用任何循环?.. 但是如果你在谈论with 语句,那么只需删除它,并使用其他地方的文件描述符。已编辑
猜你喜欢
  • 2021-08-05
  • 2020-11-14
  • 2019-10-16
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多