【发布时间】:2012-01-27 12:59:57
【问题描述】:
我有一个包含以下命令的 bat.bat 文件:'setup.py build'
我有一个脚本可以使用以下命令执行此 bat 命令:os.system('E:/bla/FPtest/retryURL/Temp_installed/bat.bat'
如果我从与 bat.bat 相同的文件夹中运行脚本......它可以完美运行。
如果我在任何其他文件夹中运行它,则会返回以下错误。
**'setup.py'** is not recognized as an internal or external command, operable program or batch file.
我也尝试过subprocess.Popen,它返回相同的结果但它在顶部包含:C:\Eclipse\Workspace\example>setup.py build ... mmmmmm ...
更新:
我决定运行 os.system 命令在保存 bat.bat 文件的同一目录中(这也是存储 setup.py 的目录)
现在通话应该如此简单。
import os
os.system('bat.bat') note: (run from pydev)
结果:
E:\App\FPtest\retryURL\Temp_installed>setup.py build
Traceback (most recent call last):
File "C:\Python31\lib\site.py", line 56, in <module>
import os
File "C:\Python31\lib\os.py", line 380, in <module>
from _abcoll import MutableMapping # Can't use collections (bootstrap)
File "C:\Python31\lib\_abcoll.py", line 49
class Hashable(metaclass=ABCMeta):
^
SyntaxError: invalid syntax
补充说明:
如果我运行任何“简单”的 .bat 文件,一切正常。如果我在解释器之外运行 .bat 文件,它也可以正常工作......这让我相信是 .bat 文件的内容导致了问题,内容是:setup.py build.
在这种情况下,.bat 文件的内容会执行一个 cx_freeze 命令来冻结和执行,但上面的错误是我尝试此操作时返回的内容
更新:
如果从标准 python 解释器运行,它似乎正在运行 'os.system('bat.bat') 或子进程等效成功执行 .bat 文件。所以只有从Pydev运行才会不成功
【问题讨论】:
-
setup.py在哪里?您需要 a) 将setup.py的完整路径放入您的bat.bat或 b) 将包含setup.py的文件夹添加到您的 PATH 变量中(在 Linux 中:export PATH=$PATH:/path/to/folder/containing/setuppy)。 -
这似乎是真正的灾难鸡尾酒。我正在尝试从 pydev 运行一个 bat 文件。正常工作。但我想让 bat 文件执行 cx_freeze 来冻结另一个程序。我已经解决并继续通过上述错误,但遇到了另一个我将在上面添加的错误
-
我在 Mac OS X 上遇到了与 Pydev 非常相似的问题——一个在终端的 Python 解释器中运行良好的外部命令,但在 Pydev 中却没有。我对了解出了什么问题以及如何解决问题非常感兴趣。
标签: python subprocess pydev os.system