Using a Windows path within Python's subprocess (point to an executable) [beginner]
我开始在安装了cygwin(python 2.7)的Windows7x64机器上开发一个小的PDF到JPG脚本。以下各项工作完美:
1 2 3 | import subprocess filename ="test" subprocess.check_output('gs -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o ' + filename + '-2800-%03d.jpg ' + filename + '.pdf', stderr=subprocess.STDOUT) |
在我的Windows10x64非cygwin机器(python 2.7)上完成这个项目后,这个代码会出错,因为它不再将"gs"识别为ghostscript的内置缩写。所以我尝试以下方法:
1 2 3 4 5 | import subprocess filename ="test" subprocess.check_output('C:\Program Files\gs\gs9.20\bin\gwin64c.exe -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o ' + filename + '-2800-%03d.jpg ' + filename + '.pdf', stderr=subprocess.STDOUT) WindowsError: [Error 2] The system cannot find the file specified |
好吧,我是个初学者,在这里犯了一些明显的错误。同时突出显示了
我也尝试过的事情(单独运行):
1 2 3 | subprocess.check_output(r'C:\Program Files\gs\gs9.20\bin\gwin64c.exe -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o ' + filename + '-2800-%03d.jpg ' + filename + '.pdf', stderr=subprocess.STDOUT') subprocess.check_output("C:\Program Files\gs\gs9.20\bin\gwin64c.exe -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o ' + filename + '-2800-%03d.jpg ' + filename + '.pdf', stderr=subprocess.STDOUT/s", shell=True) |
我读过:*如何在python中使用dir/s命令?*如何从python执行命令提示命令*用子进程包装cmd.exe*python子进程没有采用正确的参数*用子进程包装cmd.exe无效:(.
给出的错误总是:
1 2 3 4 5 6 7 8 9 10 | Traceback (most recent call last): File"C:/Python/Project/projectx/manual_conversion/manual_conversion.py", line 16, in <module> subprocess.check_output(r'C:\Program Files\gs\gs9.20\bin\gwin64c.exe -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o ' + filename + '-2800-%03d.jpg ' + filename + '.pdf', stderr=subprocess.STDOUT) File"C:\Python\Python 2.7.12\lib\subprocess.py", line 567, in check_output process = Popen(stdout=PIPE, *popenargs, **kwargs) File"C:\Python\Python 2.7.12\lib\subprocess.py", line 711, in __init__ errread, errwrite) File"C:\Python\Python 2.7.12\lib\subprocess.py", line 959, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find the file specified |
我完全理解这是新手的东西+切换到Unix将使我的生活更容易-但在我的公司环境中,我没有完全的ATM选项。任何帮助都将不胜感激!
第一个问题,如果需要的话,给我指出任何变化!
编辑1:我还尝试了:
1 | subprocess.check_output(r'C:\Program Files\gs\gs9.20\bin\gwin64c.exe -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o 2800-%03d.jpg test.pdf') |
因为我认为我的变量串联可能破坏了命令…但这又产生了同样的错误。
编辑2:将完整参数作为列表传递
1 | subprocess.check_output([r'C:\Program Files\gs\gs9.20\bin\gswin64c.exe -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o 2800-%03d.jpg test.pdf']) |
产生相同的错误。但这:
1 | subprocess.check_output([r'C:\Program Files\gs\gs9.20\bin\gswin64c.exe']) |
在Windows中启动ghostscript。感谢@lit让我尝试,现在新的问题是如何将选项传递给
仍然困扰着我它在Windows系统上是多么的简单,因为它安装了cygwin,以某种方式修改了cmd名称空间来识别"gs"…
路径在这里包含一个空格
1 | subprocess.check_output([r'"C:\Program Files\gs\gs9.20\bin\gswin64c.exe" -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o 2800-%03d.jpg test.pdf']) |