如何将子流程输出插入变量[重复]

Posted

技术标签:

【中文标题】如何将子流程输出插入变量[重复]【英文标题】:How to insert a subprocess output into a variable [duplicate] 【发布时间】:2018-04-20 08:11:35 【问题描述】:

我正在尝试在 python 中使用 Powershell 并使用 get-disk 命令 我尝试使用标准输出并打印它,但在我使用 Communicate() 函数后它的值就消失了 这是我的代码:

proc = subprocess.Popen(r"C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe", stdin = subprocess.PIPE,
                    stdout = subprocess.PIPE)
stdout, stderr = proc.communicate('get-disk')
print stdout

有什么建议吗?

【问题讨论】:

当您可以单独使用PowerShell 完成所有操作时,为什么还要使用两种脚本语言? PS C:\> Get-Disk 砰。完成。 你只是在打开一个没有参数的powershell进程。我不知道默认情况下从标准输入读取输入参数的任何进程......你谷歌了吗?那这个呢? ***.com/questions/2768790/stdin-to-powershell-script 【参考方案1】:

您可以尝试以下操作,这将读取您的进程的标准输出 使用

启动进程时
proc=Popen('Some process',stdout=subprocess.PIPE)

stdout = proc.stdout.read()

【讨论】:

【参考方案2】:

你可以像下面那样做

from subprocess import Popen
from subprocess import Popen, CREATE_NEW_CONSOLE,PIPE,STDOUT
import subprocess
command="powershell.exe get-disk"

#This will open the command in a new console
proc=Popen(command,creationflags=CREATE_NEW_CONSOLE,stdout=subprocess.PIPE)
read_stdout=[]
for lines in proc.stdout.readlines():
    read_stdout.append(lines)

print read_stdout

【讨论】:

【参考方案3】:

我推荐proc.stdout.read() 而不是proc.communicate()

你想要的是这样的:

import subprocess

cmd = r"C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe get-disk"
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
print(proc.stdout.read())
proc.stdout.close()

【讨论】:

以上是关于如何将子流程输出插入变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将插入的输出值分配给 sql server 中的变量? [复制]

如何将子查询的值存储到 Hana Studio 中的变量中?

如何将子字符串命令应用于 XP cmd 脚本中的双百分比变量?

Python-Sqlalchemy-Postgres:如何将子查询结果存储在变量中并将其用于主查询

如何为sql插入命令传入变量[重复]

在文件名中插入int变量[重复]