首页 > 解决方案 > Powershell 将 JSON 变量发送到 Python

问题描述

我在将 JSON 变量从 PowerShell 发送到 python 时遇到问题。

这就是我为 python 编写的代码:

import subprocess
import os 
import json

firstname = 'FirstName'
lastname = 'LastName'

args2 = '-FIRSTNAME %s -LASTNAME %s' % (firstname, lastname)

test = subprocess.run([
    'powershell.exe',
    'Path\\Test2.ps1',
    args2,
])

jsonvalue = json.loads(test)

print(jsonvalue)

这是 PowerShell 的:

Param(
    [Parameter(Mandatory)][string]$FIRSTNAME,
    [Parameter(Mandatory)][string]$LASTNAME
)

$result = [PSCustomObject]@{
    FirstName = $FIRSTNAME
    LastName = $LASTNAME
    FullName = $FIRSTNAME + " " + $LASTNAME
}

return $result | ConvertTo-Json

JSON输出:

{
    "FirstName":  "FirstName",
    "LastName":  "LastName",
    "FullName":  "FirstName LastName"
}

我收到的错误消息是:

TypeError: the JSON object must be str, bytes or bytearray, not CompletedProcess

从我读到的内容看来,subprocess.run正在返回CompletedProcess变量类型。不幸的是,虽然我试图绕过它是行不通的。

我认为这可能很简单,但我无法自己找到答案。我对 Python 还是很陌生,连接这两种语言对于初学者来说可能有点矫枉过正,但这不是最好的学习方式吗?:D

标签: pythonpowershell

解决方案


run不返回包含输出的字符串;你想要stdout返回值的属性。

test = subprocess.run(...)
jsonvalue = json.loads(test.stdout)

或者,改用该check_output函数。

test = subprocess.check_output(...)
jsonvalue = json.loads(test)

推荐阅读