2017-06-27 3 views
2

私は、PowerShellスクリプトをバックグラウンドで実行するPython GUIでプリンタを接続できるアプリケーションを作成しています。私は、Pythonウィジェットから入力された変数をPythonが呼び出すPowerShellスクリプトに渡す方法があるかどうか疑問に思っていました。この変数は、私がPythonで指定することができるプリンタの名前になるので、プリンタごとに別々のスクリプトを作成する必要はありません。Python GUIからPowerShellに変数を渡す

PSスクリプトに呼びかけPythonで私のコード:プリンタをコンピュータに接続し

def connect():    
     if self.printerOpts.get() == 'Chosen Printer': 
      subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",'-ExecutionPolicy','Unrestricted', '.\'./ScriptName\';']) 

PSスクリプト:私は、Pythonから変数を渡すことができれば

Add-Printer -ConnectionName \\server\printer -AsJob 

は基本的に、私は疑問に思って私のPSスクリプトの「プリンタ」部分に追加して、追加したい各プリンタ用の別のスクリプトを作成する必要がなくなりました。

答えて

3

これを行うより良い方法は、完全にPowerShellで行うか、Pythonで完成させることです。

あなたがしていることは実行可能です。 -ExecutionPolicy Unrestrictedと同じ方法で渡すことができます。これは、PowerShellスクリプトが変数を期待していることを確認することによって実現されます。

私のPythonは存在しませんので、その部分がうまくいかない場合はご容赦ください。

Pythonの

myPrinter # string variable in Python with printer name 
subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",'-ExecutionPolicy','Unrestricted', '.\'./ScriptName\';','-printer',myPrinter]) 

PowerShellの

param(
    $printer 
) 

Add-Printer -ConnectionName \\server\$printer -AsJob 
+0

ありがとうございますgmss0ulman。私は変更を適用することができましたが、PowerShellは「指定されたサーバーは存在しません」というエラーを表示しており、プリンタは追加されなくなりました。 – JDawg

+0

@JDawg Hmm .. PowerShellに渡す文字列はどのように見えますか?たぶん '\\ server \ $ printer'の代わりに' $ printer'でなければならないかもしれません – gms0ulman

+0

@ gmss0ulman私はあなたのPSスクリプトを使って、Pythonスクリプトにいくつかの変更を加えました。私はあなたが好奇心が強いかどうか質問に私の答えを掲載した。どうもありがとうございます! – JDawg

0

私のために働いた方法は、私は私のPSスクリプト内の文字列として変数を渡したことを指定した最初:

param([string]$path) 

Add-Printer -ConnectionName \\server\$path 

私のPSスクリプトはこの変数を期待していませんでした。私のPythonスクリプトでは、最初にpathという名前のmy変数を文字列として定義し、次にサブプロセス関数の最後に "path"を入力する必要がありました。

 path = "c" 
     subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",'-ExecutionPolicy','Unrestricted', 'Script.ps1', path]) 
関連する問題