我有一个包含以下命令的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命令来冻结和exe,但上面的错误是我尝试这个时返回的错误
更新
如果从标准python解释器运行,它似乎运行'os.system('bat.bat')或子进程等效成功执行.bat文件。所以如果从Pydev
运行它只是不成功答案 0 :(得分: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
注意***如果PATHEXT环境变量中存在.py
,您也可以在没有扩展名的情况下运行脚本(不推荐)。
答案 1 :(得分:0)
看起来你的路径变量不包含任何一个命令。尝试将PATH环境变量添加到两个脚本所在的目录中。
在Windows中,您可以通过右键单击“我的电脑” - >执行此操作;属性 - &gt;高级(Windows 7中的左窗格) - &gt;环境变量。只需将路径固定在前面并确保有一个;在您的条目和路径变量的开头之间......不要删除那些已经存在的内容。
答案 2 :(得分:0)
我创造了一个解决方案,这比我原来的问题更实际,更有效。在解决原始问题之前,我会接受这个答案
而不是使用.bat文件...将.bat文件的内容放在.py子流程中
导入子流程
subprocess.Popen('python -E setup.py build')