如何将子流程输出插入变量[重复]
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 脚本中的双百分比变量?