2011-08-01 27 views
13

からPowerShellスクリプトを呼び出す:は、私はこのようなのpythonからPowerShellスクリプトを起動しようとしているのPython

psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe', 
          './buildxml.ps1', 
          arg1, arg2, arg3], cwd=os.getcwd()) 
result = psxmlgen.wait() 

問題は、私は次のエラーを取得ということです。事実にもかかわらず

File C:\Users\sztomi\workspace\myproject\buildxml.ps1 cannot be loaded because the execution of scripts is disabled on this system. Please see "get-help about_signing" for more details.

を私は以前Powershellでスクリプトを実行することを可能にしました。これは、管理者が実行したPS端末にSet-ExecutionPolicy Unrestricedと入力することで可能になりました(もう一度やりました)。 PowerShell実行ファイルは、スタートメニューのショートカットが指すものと同じです。 Get-ExecutionPolicyは、PowerShellをadminとして実行したかどうかに関係なく、正しくUnrestrictedを報告します。

PSスクリプトをPythonから正しく実行するにはどうすればよいですか?

答えて

15

まず、Set-ExecutionPolicy Unrestricedはユーザー単位であり、ビット単位(32ビットは64ビットとは異なります)です。

第2に、実行ポリシーをコマンドラインから上書きすることができます。

psxmlgen = subprocess.Popen([r'C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe', 
          '-ExecutionPolicy', 
          'Unrestricted', 
          './buildxml.ps1', 
          arg1, arg2, arg3], cwd=os.getcwd()) 
result = psxmlgen.wait() 

どうやらあなたは(おかげで、コメントに@eryksunする)このパスで32ビットのPowerShellから64ビットのPowerShellにアクセスすることができます。

powershell64 = os.path.join(os.environ['SystemRoot'], 
    'SysNative' if platform.architecture()[0] == '32bit' else 'System32', 
    'WindowsPowerShell', 'v1.0', 'powershell.exe') 
+2

、ありがとうございました!実際には、問題はWindows 7 x64のファイルシステムのリダイレクトが原因であることが分かりました。 (私はx64版では無制限のポリシーを持っていましたが、x86ではそうではなく、pythonはそれにリダイレクトされませんでした)。 –

+0

サブプロセスで実行可能ファイルを呼び出す方法は完全にはわかりませんが、実際に呼び出されているコマンドは './buildxml.ps1'です。 –

+0

@ someone-or-other buildxml.ps1はpowershellスクリプトファイルで、実行可能ファイル(コマンドであれば)は '' C:\ WINDOWS \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe ''です。リスト内のすべての項目は、この実行可能ファイルに渡されるパラメータです。 –

0

をどのように知りたかった私たちの人のためにそれはPowerShellのに渡された後にすべてを行う必要があり、ARG1、ARG2とARG3の値を表示:うわーそれは素晴らしいことだ

Write-Host $args[0] 
Write-Host $args[1] 
Write-Host $args[2] 
関連する問題