[英]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.