Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法运行Python';s subprocess.check_输出,但不将cwd设置为与调用的exe相同的目录_Python_Windows - Fatal编程技术网

有没有办法运行Python';s subprocess.check_输出,但不将cwd设置为与调用的exe相同的目录

有没有办法运行Python';s subprocess.check_输出,但不将cwd设置为与调用的exe相同的目录,python,windows,Python,Windows,我正在尝试自动化一些任务-这个过程需要我调用一些exe并传递参数。exe的特定目录位于windows的PATH变量中。然而,我总是得到一份工作 WindowsError: [Error 2] The system cannot find the file specified 我目前的解决方法是将os.cwd设置为带有exe的目录,但这会对我们如何分发代码施加一些其他限制。我想指出的是,在任何情况下,如果我启动一个cmd窗口并键入与我传递给subprocess.check_output相同的代码

我正在尝试自动化一些任务-这个过程需要我调用一些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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
rarProcess=检查输出(“”“WinRAR a-r-v700m-sfx-agYYYYMMDD NN-iiconD:\\RARROURCES\\de96.ico-iimgd:\\RARROURCES\\accounting2013.bmp d:\\testFTP\\compressed\u test\d:\\files\u to\u compressed”“)
文件“C:\Program Files(x86)\python\lib\subprocess.py”,第537行,在check\u输出中
进程=Popen(stdout=PIPE,*popenargs,**kwargs)
文件“C:\Program Files(x86)\python\lib\subprocess.py”,第679行,在\uuu init中__
错误读取,错误写入)
文件“C:\Program Files(x86)\python\lib\subprocess.py”,第893行,在\u execute\u child中
startupinfo)
WindowsError:[错误2]系统找不到指定的文件

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

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

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

检查this()或this()请展示一个实际的代码示例,以及它的预期行为和实际输出,而不是描述一个假设的问题。我怀疑您在其他目录中的文件有问题,因为在文本中没有正确引用“\”字符。
help(subprocess.check\u output)
将您引用到Popen<代码>帮助(subprocess.Popen)告诉您有关cwd参数的信息。如果你不先检查帮助,这里的人会变得暴躁。我确实试过帮助检查输出,但我看不到任何指导我的东西。谢谢,但没有帮助谢谢,我把这个标记为有用,但这不是我需要的答案,因为我可能不知道我需要的exe的路径,我只知道路径将是环境变量之一。