【问题标题】: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进程。我不知道默认情况下从标准输入读取输入参数的任何进程......你谷歌了吗?那这个呢? stackoverflow.com/questions/2768790/stdin-to-powershell-script

标签: python powershell subprocess


【解决方案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()
      

      【讨论】:

        猜你喜欢
        • 2016-11-23
        • 2011-05-29
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        • 2019-11-05
        • 2015-11-08
        相关资源
        最近更新 更多