Запуск сценария powershell в скрипте python, как заставить python печатать вывод powershell во время его запуска

Я пишу скрипт python, который проверяет различные условия и запускает скрипт powershell, чтобы помочь мне автоматизировать перенос из Windows XP в Windows 7. Скрипт powershell дает свой собственный результат, предоставляя пользователям обновления о том, что происходит. Я хотел бы взять вывод сценария powershell и напечатать его как вывод скрипта python. Я рассмотрел некоторые вопросы, которые, похоже, хотят сделать то же самое, но они, похоже, не работают для меня. Сначала я попытался использовать

import subprocess subprocess.call(["C:\Users\gu2124\Desktop\helloworld.ps1"]) 

Как было предложено здесь, запустите функцию PowerShell из сценария Python, но я обнаружил, что это ожидает, что программа будет выполняться первой и не выдаст результат, поэтому я выяснил, что мне нужно использовать subprocess.Popen() как было предложено здесь. Используйте Popen для выполнения Скрипт Powershell в Python, как я могу получить вывод сценария Powershell и обновить его на веб-странице? поэтому я попробовал это

 import subprocess subprocess.Popen(["C:\Users\gu2124\Desktop\helloworld.ps1"], stdout=sys.stdout) 

и я получаю эту ошибку

 Traceback (most recent call last): File "C:\Users\gu2124\Desktop\pstest.py", line 5, in <module> subprocess.Popen(["C:\Users\gu2124\Desktop\helloworld.py1"], stdout=sys.stdout) File "C:\Python27\lib\subprocess.py", line 701, in __init__ errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr) File "C:\Python27\lib\subprocess.py", line 848, in _get_handles c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) File "<string>", line 523, in __getattr__ File "C:\Program Files\PyScripter\Lib\rpyc.zip\rpyc\core\netref.py", line 150, in __getattr__ return syncreq(self, consts.HANDLE_GETATTR, name) File "C:\Program Files\PyScripter\Lib\rpyc.zip\rpyc\core\netref.py", line 71, in syncreq return conn.sync_request(handler, oid, *args) File "C:\Program Files\PyScripter\Lib\rpyc.zip\rpyc\core\protocol.py", line 434, in sync_request raise obj AttributeError: DebugOutput instance has no attribute 'fileno' 

Я не совсем уверен, что это значит, но из того, что, как мне кажется, я понял после прочтения этого AttributeError: у экземпляра StringIO нет атрибута «fileno» , так это потому, что я неправильно вхожу в stdout. Я посмотрел вокруг больше, и я нашел это Почему не будет работать мой подпроцесс python? где ответы сказали использовать stdout=subprocess.PIPE поэтому я попробовал это

 import subprocess subprocess.Popen(["C:\Users\gu2124\Desktop\helloworld.ps1"], stdout=subprocess.PIPE) 

который также не дает мне результата. Наконец, я увидел это http://www.pythonforbeginners.com/os/subprocess-for-system-administrators и изменил свой код на этот

 import subprocess p = subprocess.Popen(["powershell","C:\Users\gu2124\Desktop\helloworld.ps1"], stdout=subprocess.PIPE) print p.communicate 

Я думал, что это может быть, потому что я изначально пытаюсь запустить скрипт powershell из командной строки, поэтому мне сначала нужно открыть powershell. Когда я набираю эти команды непосредственно в командной строке, он работает так, как должен, но когда я запускаю его через скрипт python, он дает это

 <bound method Popen.communicate of <subprocess.Popen object at 0x00000000026E4A90>> 

который, как я думаю, является улучшением, но не «Hello world», которого я ожидал. Я понятия не имею, что я должен попытаться сделать, чтобы заставить это работать. Любая помощь будет принята с благодарностью

Кроме того, если я использую сценарий powershell, который я использую здесь, это

 $strString = "Hello World" write-host $strString function ftest{ $test = "Test" write-host $test } 

EDIT: Я попытался перейти на python 3.3, как это было предложено в первом ответе, но я все еще не могу заставить его работать. Я использовал команду p = subprocess.Popen(['powershell.exe', "C:\\Users\\gu2124\\Desktop\\helloworld.ps1"], stdout=sys.stdout) и я уверен, что файл там но я получаю эту ошибку:

 Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> p = subprocess.Popen(['powershell.exe', "C:\\Users\\gu2124\\Desktop\\helloworld.ps1"], stdout=sys.stdout) File "C:\Python27\lib\subprocess.py", line 701, in __init__ errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr) File "C:\Python27\lib\subprocess.py", line 848, in _get_handles c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) UnsupportedOperation: fileno 

2 Solutions collect form web for “Запуск сценария powershell в скрипте python, как заставить python печатать вывод powershell во время его запуска”

  1. Убедитесь, что вы можете запускать сценарии powershell (по умолчанию он отключен). Вероятно, вы уже это сделали. http://technet.microsoft.com/en-us/library/ee176949.aspx

     Set-ExecutionPolicy RemoteSigned 
  2. Запустите этот скрипт python на скрипте powershell helloworld.py :

     # -*- coding: iso-8859-1 -*- import subprocess, sys p = subprocess.Popen(["powershell.exe", "C:\\Users\\USER\\Desktop\\helloworld.ps1"], stdout=sys.stdout) p.communicate() 

Этот код основан на python3.4 (или любом интерпретаторе серии 3.x), хотя он должен работать и с серией python2.x.

 C:\Users\MacEwin\Desktop>python helloworld.py Hello World 

У меня не установлен Python 2.7, но в Python 3.3 вызывается Popen с stdout установленным в sys.stdout сработало отлично. Тем не менее, прежде чем я избежал обратной косой черты.

 >>> import subprocess >>> import sys >>> p = subprocess.Popen(['powershell.exe', 'C:\\Temp\\test.ps1'], stdout=sys.stdout) >>> Hello World _ 
  • Как отобразить utf-8 в консоли Windows
  • Ошибка Selenium 3.0.2 с Firefox 50: у исполняемого файла могут быть неправильные разрешения
  • Возможно ли записать данные EXIF ​​с помощью Python 3 в Windows?
  • Python: Как я могу сделать escape-коды ANSI работать и в Windows?
  • Как установить wxPython в virtualenv
  • Как настроить IPython на использование gvim для Windows?
  • Python: strftime () UTC Offset Не работает как ожидается в Windows
  • ошибка при установке python pip rrdtool на windows 7
  •  
    Interesting Posts for Van-Lav

    Использование scipy.spatial.Delaunay вместо встроенной версии matplotlib.tri.Triangulation

    Операция поиска и замены

    Как читать и печатать текст с символами новой строки из строки Python (Django) с HTML?

    Как перезаписать предыдущую строку печати в Jupyter / IPython

    Многопоточность в python

    Получение резюме в виде Facebook (название, резюме, соответствующие изображения) с использованием Python

    Для двух списков питона той же длины. Как вернуть лучшие совпадения одинаковых значений?

    Не удалось выполнить команду python setup.py egg_info с кодом ошибки 1

    Как создать int 1 в двух разных местах памяти?

    django.template.base.TemplateSyntaxError: тег «block» с именем «bottom_js» появляется более одного раза

    Используя Python, как мне получить двоичную сериализацию моего сообщения protobuf в Google?

    Как создать db mysql с sqlalchemy

    Как получить размер изображения с использованием стандартного класса Python (без использования внешней библиотеки)?

    Как разобрать сломанный XML в Python?

    pandas извлекают частоту временного ряда

    Python - лучший язык программирования в мире.