在Windows中Python的一些处理结束时,我试图弹出一个USBSD卡。研究一下这里,似乎有两种方法可以做到这一点;调用PowerShell程序或在Python中运行PowerShell。
有谁能给我一些指导吗?请尽量简单;学习Python是我的新年计划。
所以我写了一个PowerShell脚本(ejectusb.ps1),它运行得很好:
$drive = New-Object -ComObject Shell.Application
$drive.Namespace(17).Parsename("J:").InvokeVerb("Eject")
然后我在Python中使用subprocess调用它:
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命令屏幕的屏幕短暂 Flink ,但SD卡没有弹出。没有错误信息。
有谁能给我一些指导吗?请尽量简单;学习Python是我的新年计划。
1条答案
按热度按时间aelbi1ox1#
Hamed的解决方案使用参数“powershell”来启动PowerShell,即
subprocess.run(["powershell", "-File", "E:\Data\Computing\Software\MicroSoft\Programming\Powershell\ejectusb.ps1"])
我一直使用PowerShell的完整路径作为参数,即
subprocess.run(["C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe", etc
此路径是正确的(如果我将其键入Windows文件资源管理器的地址栏,它将启动PowerShell。但它会导致“文件未找到”错误。所以我不知道完整路径的问题是什么,但我很感谢Hamed的解决方案。