关于为什么os.system()失败的任何想法?

时间:2012-06-14 13:06:33

标签: python cmd os.system

我最近在新电脑上安装了python。 我找不到os.system()失败或失败的原因。 我在主脚本中尝试了os.popen()和子进程,但这并没有解决问题。

主要关注为什么os.system()的这个简单测试无法开始。

在cmd提示符中:

>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v. 1500 32 bit (Intel)] on win32
>>> import os
>>> os.system("dir")
-1
>>> os.system("cmd /c dir")
-1
>>> import subprocess
>>> subprocess.call("dir", shell=True)
Traceback ...
...
WindowsError: [Error 2] System could not locate file
>>> exit()
dir
(list of files)

我使用dir作为示例,但是当我调用系统路径中包含的任何其他程序时,会发生同样的事情。它将直接从cmd行运行,但不能通过os.system或subprocess运行。

2 个答案:

答案 0 :(得分:3)

dir不是可执行文件,它是cmd.exe命令。

尝试:

os.system("cmd /c dir")

subprocess.call("dir", shell=True)

答案 1 :(得分:1)

我明白了。我怀疑它与环境变量有关。

虽然我添加了Path所需的所有程序,但我从来没有看过ComSpec环境变量。

显然,我添加了

C:\Program Files (x86)\Java\jre7\bin
除了默认

之外,

comspec

%SystemRoot%\system32\cmd.exe

我仍然不确定原因,但如果您想通过os.systemsubprocessos.popen来调用文件,则会出现问题。

解决方案是将所有路径从Path添加到ComSpec,或者只是删除Java二进制文件的路径。

完成后,一切正常,(甚至是dir)。