我最近在新电脑上安装了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运行。
答案 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.system
或subprocess
或os.popen
来调用文件,则会出现问题。
解决方案是将所有路径从Path添加到ComSpec
,或者只是删除Java二进制文件的路径。
完成后,一切正常,(甚至是dir)。