在Python的子进程中使用Windows路径(指向可执行文件)[beginner]

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

好吧,我是个初学者,在这里犯了一些明显的错误。同时突出显示了.20\bin\之间的"\b"字符…向我暗示我不知何故还没有弄清楚这是一条单行道。

我也尝试过的事情(单独运行):

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让我尝试,现在新的问题是如何将选项传递给subprocess的check_output executable:。

仍然困扰着我它在Windows系统上是多么的简单,因为它安装了cygwin,以某种方式修改了cmd名称空间来识别"gs"…


路径在这里包含一个空格Program Files。通常,空间意味着路径的终点。在路径周围使用引号"可以告诉操作系统不要将空间视为路径的结尾,而是将引号之间的所有文本视为路径。所以只需添加引号:

1
subprocess.check_output([r'"C:\Program Files\gs\gs9.20\bin\gswin64c.exe" -sDEVICE=jpeg -dPDFFitPage -g2800x3620 -o 2800-%03d.jpg test.pdf'])