有没有办法运行Python的subprocess.check_output而cwd与被调用的exe目录不同

时间:2014-09-02 23:35:04

标签: python windows

我正在尝试自动执行某些任务 - 该过程需要我调用一些exe并传递参数。 exe的特定目录位于Windows的PATH变量中。但是,我一直得到一个

WindowsError: [Error 2] The system cannot find the file specified

我目前的解决方法是将os.cwd设置为带有exe的目录,但这对我们分发代码的方式施加了一些其他限制。我想要注意的是,在每种情况下,如果我启动一个cmd窗口并输入相同的代码,我将传递给subprocess.check_output,无论我在计算机上的目录是什么,代码都能正常工作。

为了清楚起见,我担心尝试自动化WinRAR任务并且WinRAR.exe位于其计算机上的不同文件夹中。

好的回复下面的评论是我将cwd更改为root(c :)后的输入和输出

对子流程的调用

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

现在我无法证明这不是一个假设的问题/问题。当我通过cmd窗口使用相同的命令(调整路径分隔符)并且在运行上面粘贴的命令之前将目录更改为目录时,我得到了预期的结果。

1 个答案:

答案 0 :(得分:1)

您无需设置os.cwd并运行该过程。而是将“Winrar.exe”文件的位置作为dict传递给子进程。

proc = subprocess.Popen(args, env={'PATH': '/path/to/winrar.exe'})