【问题标题】:calling another python and capturing the output in variables [duplicate]调用另一个python并捕获变量中的输出[重复]
【发布时间】:2021-11-28 16:14:10
【问题描述】:

我有一个现有的带有命令参数的 python 脚本,它输出如下所示的字符串。我正在尝试将其调用到另一个 python 脚本中,并通过另一个变量动态传递 prodName。

我尝试了类似这样的方法:

#!/usr/bin/env python
import subprocess

subprocess.call("/usr/st/getProdID.py ProdName=someProd_name Prod_config=/usr/st/prod/prod_id.txt", shell=True)

输出:

Ad897

我无法将此输出重定向到变量

#!/usr/bin/env python
import subprocess

pid = subprocess.call("/usr/st/getProdID.py ProdName=someProd_name Prod_config=/usr/st/prod/prod_id.txt", shell=True)
print "pid = ", pid

输出:

Ad897

Pid = 0

感谢任何帮助。谢谢!

【问题讨论】:

  • 顺便说一句,python 2.x 已停产。考虑使用 python 3。答案在 2.x 和 3.x 之间有点不同。
  • 你为什么不直接importgetProdID 并使用它?
  • check_outputPopen 后跟communicate 是两种最常见的捕获输出的方式。子流程文档中有示例。

标签: python subprocess


【解决方案1】:

使用 Python3,您可以运行:

p = subprocess.run(["getProdID.py", f"ProdName={prod}", "Prod_config=/usr/st/prod/prod_id.txt"], capture_output=True)
output = p.stdout

在 Python2 上,事情有点棘手:

p = subprocess.Popen(["getProdID.py", "ProdName={0}".format(prod), "Prod_config=/usr/st/prod/prod_id.txt"], stdout=subprocess.PIPE)
output = p.stdout.read()

【讨论】:

  • 您可能需要解码该 p.stdout。我认为您不需要有关导入的说明。调用而不是 import 的原因有很多——第 1 号,它写成一个带有参数的脚本,并且不在你的 PYTHONPATH 中,所以很可能根本不是一个可导入的模块。调用脚本解析输出是正常的设计。
  • @thecohenman 我试过了,但它说 >TypeError: __init__() got an unexpected keyword argument 'capture_output' 但是我试过了,效果更好:p = subprocess.check_output(["getProdID.py", f"ProdName={prod}", "Prod_config=/usr/st/prod/prod_id.txt"]) print ("pid =", p) > pid = b' Ad897\n'
  • 也许你正在使用python2。编辑了答案
  • 其实 subprocess.check_output 调用 subprocess.Popen(stdout=PIPE)
猜你喜欢
  • 2017-01-29
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2016-11-08
  • 1970-01-01
相关资源
最近更新 更多