所以我创建的应用程序可以将打印机连接到在后台运行PowerShell脚本的Python GUI。我想知道是否有一种方法可以将从Python小部件输入的变量传递给Python调用的PowerShell脚本。这个变量是我可以在Python中指定的打印机的名称,这样我就不必为每台打印机创建单独的脚本。
我的Python代码调用了PS脚本:
def connect():
if self.printerOpts.get() == 'Chosen Printer':
subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",'-ExecutionPolicy','Unrestricted', '.\'./ScriptName\';'])
将打印机连接到计算机的PS脚本:
Add-Printer -ConnectionName \\server\printer -AsJob
基本上,我想知道我是否可以将Python中的变量传递到我的PS脚本的“打印机”部分,这样我就不必为每个要添加的打印机创建不同的脚本。
答案 0 :(得分:3)
更好的方法是在PowerShell中完成,或在Python中完成。
你所追求的是可行的。您可以通过确保PowerShell脚本期望变量来传递它,就像传递-ExecutionPolicy Unrestricted
一样。
我的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
答案 1 :(得分:0)
对我有用的方法是首先指定我在我的PS脚本中将变量作为字符串传递:
param([string]$path)
Add-Printer -ConnectionName \\server\$path
我的PS脚本没想到这个变量。在我的Python脚本中,我必须首先定义my变量,将path命名为字符串,然后在子进程函数的末尾输入“path”。
path = "c"
subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe",'-ExecutionPolicy','Unrestricted', 'Script.ps1', path])