有没有办法在不将cwd设为exe所在目录的情况下运行Python的subprocess.check_output?
我正在尝试自动化一些任务,这个过程需要我调用一些可执行文件(exe)并传递参数。这些可执行文件所在的目录已经在Windows的PATH变量中设置好了。不过,我总是遇到一个问题:
WindowsError: [Error 2] The system cannot find the file specified
我现在的解决办法是把工作目录(os.cwd)设置为包含exe的目录,但这样会对我们如何分发代码造成一些限制。我想说明的是,每次如果我打开一个命令提示符窗口,输入我传给subprocess.check_output的相同代码,无论我在电脑的哪个目录下,这段代码都能正常工作。
为了更清楚,我担心比如说自动化一个WinRAR的任务,而WinRAR.exe在他们电脑的不同文件夹里。
好的,针对下面的评论,这里是我把工作目录改为根目录(c:)后的输入和输出:
调用subprocess的代码:
rarProcess = check_output('''WinRAR a -r -v700m -sfx -agYYYYMMDD-NN -iiconD:\\RarResources\\de96.ico -iimgd:\\RarResources\\accounting2013.bmp d:\\testFTP\\compressed_test_ d:\\files_to_compress''')
这是完整的错误追踪信息:
Traceback (most recent call last):
File "<pyshell#93>", line 1, in <module>
rarProcess = check_output('''WinRAR a -r -v700m -sfx -agYYYYMMDD-NN -iiconD:\\RarResources\\de96.ico -iimgd:\\RarResources\\accounting2013.bmp d:\\testFTP\\compressed_test_ d:\\files_to_compress''')
File "C:\Program Files (x86)\python\lib\subprocess.py", line 537, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "C:\Program Files (x86)\python\lib\subprocess.py", line 679, in __init__
errread, errwrite)
File "C:\Program Files (x86)\python\lib\subprocess.py", line 893, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
现在我不能证明这不是一个假设的问题。我在命令提示符窗口中使用相同的命令(调整路径分隔符)时得到了预期的结果,如果在运行上面粘贴的命令之前,先把目录切换到包含exe的目录,也能正常工作。
1 个回答
1
你不需要设置操作系统的当前工作目录,也不需要运行这个过程。相反,你只需要把“Winrar.exe”文件的位置作为一个字典传递给子进程。
proc = subprocess.Popen(args, env={'PATH': '/path/to/winrar.exe'})