2017-04-12 28 views
3

我有一個python腳本,它基於關閉通過休息獲得的輸入來構建命令。 這些命令在打印出來並複製並粘貼到PowerShell時起作用。 我的問題是如何使它實際執行命令?用python編寫命令並在powershell中執行

到目前爲止,我已經嘗試寫命令在同一個目錄中的文件並運行,像這樣:

import subprocess, sys 
p = subprocess.Popen(["powershell.exe", "test.ps1"],stdout=sys.stdout) 
p.communicate() 

但我得到一個錯誤:

Traceback (most recent call last): File "C:/Users/pschaefer/src/python/executePowerShell.py", line 2, in p = subprocess.Popen(["powershell.exe", "test.ps1"],stdout=sys.stdout) File "C:\Python27\lib\subprocess.py", line 703, in init errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr) File "C:\Python27\lib\subprocess.py", line 850, in _get_handles c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) UnsupportedOperation: fileno

更新

刪除,stdout=sys.stdout1擺脫了以前的錯誤,現在我看到

test.ps1 cannot be loaded because running \r\nscripts is disabled on this system.

我試過將命令切換到".\\test.ps1 Set-ExecutionPolicy -ExecutionPolicy unrestricted",仍然有問題。

另外,是否有可能將這些命令構建爲字符串並逐個執行,而不是創建一個.ps1文件?對任何能夠解決這個問題的人都非常讚賞!

+1

你不需要'stdout = sys.stdout'它是默認的。你用'os.system()'試過了嗎?或'subprocess.check_call()'? –

+0

啊刪除'stdout = sys.stdout'停止了我在python shell中看到的錯誤,我簡單地看到了什麼看起來是一個PowerShell窗口彈出式窗口,但是我不知道它是什麼。關於如何阻止它關閉,我可以添加到ps1文件的任何想法?對不起,這裏的powershell –

+0

不要從你的IDE運行它,從標準控制檯運行它 –

回答

1

您的機器是否正在運行腳本以啓用運行PowerShell腳本?您可以通過Set-ExecutionPolicy cmdlet進行設置,也可以通過-ExecutionPolicy Bypass參數來運行具有較低權限的腳本。

+0

這可能是因爲我可以直接在PowerShell中運行生成的ps1文件沒有問題。我運行了Set-ExecutionPolicy命令,但仍然看到錯誤「test.ps1無法加載,因爲在此係統上禁用了\ r \ nscripts」。當試圖運行python腳本時 –

+0

嘗試將-Executionpolicy Bypass標誌與您的一起傳遞。ps1文件名 – PrestonM

+0

請注意,我需要在x64和x86版本的PowerShell中運行該命令才能使其運行 –

1

不支持從IDE運行此類腳本,因爲IDE會將stdout重定向到它們自己的流,大多數情況下它不會正確支持fileno

儘管如此,在真實系統shell中運行這些命令仍然有效。

這兩個殼& IDE是去除stdout=sys.stdout,但你不能得到錯誤信息或者檢索輸出,甚至更好的工作解決方法:

import subprocess, sys 
p = subprocess.Popen(["powershell.exe", "test.ps1"],stdout=subprocess.PIPE,stderr=subprocess.PIPE) 
out,err = p.communicate() 
print(out,err) 
:使用 Popen能力重定向輸出/錯誤流

在我的機器上,因爲test.ps1不存在,我得到一個清晰的PowerShell錯誤消息。

編輯:我的回答沒有回答你的編輯你的問題,現在顯示實際的錯誤信息。這個Q & A可能會幫助你:PowerShell says "execution of scripts is disabled on this system."

+0

因此,使用腳本(在python shell中),我可以看到一個錯誤:「test.ps1無法加載,因爲在此係統上禁用了\ r \ nscripts。」 如果我直接在poweshell中運行腳本,我會看到一個消失的快速彈出窗口。 如果我在powershell中只運行ps1文件,它會按預期工作,想法? –

+0

我發現這個:http://stackoverflow.com/questions/4037939/powershell-says-execution-of-scripts-is-disabled-on-this-system –