簡體   English   中英

從 Python 運行 Powershell 腳本?

[英]Run Powershell script from Python?

在 Python in Windows 中的一些處理結束時,我試圖彈出 USB SD 卡。 在這里研究似乎有兩種方法可以做到這一點; 調用 PowerShell 程序或在 Python 內運行 PowerShell。

誰能給我任何指導。 請保持簡單; 學習Python是我的新年項目。

所以我寫了一個 PowerShell 腳本(ejectusb.ps1),它運行得很好:

$drive = New-Object -ComObject Shell.Application
$drive.Namespace(17).Parsename("J:").InvokeVerb("Eject")

然后我使用子進程從 Python 調用它:

subprocess.run(["E:\Data\Computing\Software\MicroSoft\Programming\Powershell\ejectusb.ps1"])

SD 卡沒有彈出,我收到錯誤消息:

Traceback (most recent call last):
  File "E:/Data/Computing/Software/Scripts/SdCardPlayEachVideo06.py", line 91, in <module>
subprocess.run(["E:\Data\Computing\Software\MicroSoft\Programming\Powershell\ejectusb.ps1"])
File "C:\Users\David\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 548, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Users\David\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 1024, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\David\AppData\Local\Programs\Python\Python311\Lib\subprocess.py", line 1493, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
OSError: [WinError 193] %1 is not a valid Win32 application

我不明白這個錯誤信息。

所以我嘗試使用以下命令在 Python 中運行 PowerShell:

os.system('powershell $driveEject = New-Object -comObject Shell.Application; 
    $driveEject.Namespace(17).ParseName("J:").InvokeVerb("Eject")')

一個空的 PowerShell 屏幕,還有一個看起來像 Windows 的命令屏幕,短暫地 flash,但沒有彈出 SD 卡。 沒有錯誤信息。

誰能給我任何指導。 請保持簡單; 學習Python是我的新年計划。

要從 Python 運行 PowerShell 腳本,您需要使用子進程模塊調用 PowerShell 可執行文件並將腳本文件作為參數傳遞。 您可以通過以下命令調用腳本:

subprocess.run(["powershell", "-File", "E:\Data\Computing\Software\MicroSoft\Programming\Powershell\ejectusb.ps1"])

或者,您也可以使用子進程模塊和 powershell.exe 命令直接在 Python 中運行 PowerShell 命令。

subprocess.run(["powershell", "$drive = New-Object -ComObject Shell.Application; $drive.Namespace(17).Parsename('J:').InvokeVerb('Eject')"])

確保驅動器的盤符是正確的。

Hamed 的解決方案使用參數 'powershell' 啟動 PowerShell。即 subprocess.run subprocess.run(["powershell", "-File", "E:\Data\Computing\Software\MicroSoft\Programming\Powershell\ejectusb.ps1"])

我一直在使用 PowerShell 的完整路徑作為參數,即 subprocess.run subprocess.run(["C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe", etc這個路徑是正確的(如果我把它輸入Windows 文件資源管理器的地址欄它啟動 PowerShell。但這會導致“找不到文件”錯誤。所以我不知道完整路徑有什么問題,但我感謝 Hamed 的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM