在Python中运行外部脚本

时间:2014-04-02 18:36:41

标签: python windows python-2.7 powershell subprocess

我尝试使用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

这样做的正确方法是什么?

2 个答案:

答案 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