2

我有一个包含以下命令的 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 ...

更新:

我决定在保存 bat.bat 文件的同一目录中运行 os.system 命令(这也是存储 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 运行才会不成功

4

3 回答 3

3

在 Windows 2000 及更高版本中,.py扩展与运行解释器的打开命令相关联。这实际上是在安装期间完成的。但是为了通过解释器运行 python 脚本,脚本应该在当前目录中,或者应该在路径环境变量中连接的目录之一中。

在您的情况下,如果 setyp.py 存在于某些中并且路径是绝对的,您可以执行以下操作

path=%path%;<directory containing setup.py>

另一方面,如果 setup.py 位于批处理文件的相对目录中,该目录不是绝对路径。您需要从当前批处理文件位置指定完整的相对路径。就像是

..\<sub directory>\setyp.py #If the script is below the current path

或者

.\<sup directory>\setyp.py #If the script is above the current path

.py注意*** 如果PATHEXT 环境变量中存在,您也可以在没有扩展名的情况下运行脚本(不推荐) 。

于 2011-12-25T08:04:44.823 回答
0

看起来您的路径变量不包含任何一个命令。尝试将两个脚本所在的目录添加到您的 PATH 环境变量中。

在 Windows 中,您可以通过右键单击我的电脑 -> 属性 -> 高级(Windows 7 中的左窗格)-> 环境变量来执行此操作。将路径放在前面并确保有一个更容易; 在您的输入和路径变量的开头之间......不要删除已经存在的内容。

于 2011-12-25T05:59:25.277 回答
0

我已经创建了一个解决方法,它实际上比我原来的问题更实用和有效。我会接受这个答案,直到解决原来的问题

而不是使用 .bat 文件......将 .bat 文件的内容放在 .py 子进程中是可行的

导入子
进程 subprocess.Popen('python -E setup.py build')

于 2011-12-25T13:05:06.980 回答