我尝试使用subprocess.call
运行PowerShell脚本而没有太多运气。
subprocess.call(['.\ConvertPPTtoImage.ps1', path+'file.pptx'])
直接从PowerShell运行.\ConvertPPTtoImage.ps1 file.pptx
工作正常,但上面的行只是在记事本中打开ConvertPPTtoImage.ps1
。我尝试过其他变体(从开始删除.\
,删除shell=True
,使用os.system而不是subprocess.call)并崩溃或WindowsError: [Error 193] %1 is not a valid Win32 application
这样做的正确方法是什么?
答案 0 :(得分:0)
主要在linux机器上工作,这是我最好的猜测。听起来ConvertPPTtoImage.ps1
是一个脚本,然后由powershell运行。该命令正在尝试运行它(a)使用ps1
文件的默认程序,它会在记事本中打开它,或者(b)作为可执行文件本身运行它,因为文本文件本身不可执行而失败。解决方案是更换呼叫,如下所示。
subprocess.call([r'C:\path\to\powershell.exe',r'.\ConvertPPTtoImage.ps1',path+'file.pptx'])
也就是说,使用参数调用powershell来告诉它运行哪个脚本。
作为旁注,每当在python中使用Windows路径时,我建议在每个字符串的开头之前放置一个r,这告诉python忽略转义序列。由于python的转义字符和Window的路径分隔符都是反斜杠,因此可以节省很多麻烦。
答案 1 :(得分:0)
您需要自己调用PowerShell可执行文件。默认情况下,Windows将在记事本或您选择的其他文本编辑器中打开.ps1
个文件。默认情况下,它们不会使用PowerShell作为安全功能运行。
powershell.exe -ExecutionPolicy Bypass -File c:\path\to\ConvertPPTtoImage.ps1 c:\path\to\file.pptx