4

我最近在一台新计算机上安装了 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 或子进程运行。

4

2 回答 2

3

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

尝试:

os.system("cmd /c dir")

或者

subprocess.call("dir", shell=True)
于 2012-06-14T13:08:05.040 回答
1

我想到了。正如我怀疑这与环境变量有关。

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

显然,我添加了

C:\Program Files (x86)\Java\jre7\bin

除了comspec默认

%SystemRoot%\system32\cmd.exe

我仍然不确定为什么,但是如果您想通过os.systemorsubprocess或调用文件,这会导致问题os.popen

解决方案是要么添加从 Path 到的所有路径ComSpec,要么简单地删除 Java 二进制文件的路径。

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

于 2012-06-14T21:46:22.930 回答