从Python运行Powershell脚本?

omvjsjqw  于 2023-02-08  发布在  Shell
关注(0)|答案(1)|浏览(214)

在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是我的新年计划。

aelbi1ox

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的解决方案。

相关问题