在 Windows 上双击不会执行 Python 脚本

Jef*_*opo 1 python windows scripting inheritance

对于这样的项目结构:

/tumblr
    /tumblr
        /module_foo
            __init__.py
            submodule_foo.py
        /module_bar
            __init__.py
            submodule_bar.py
        __init__.py
        bot.py
Run Code Online (Sandbox Code Playgroud)

我正在做这样的事情:

import sys
sys.path.append('C:\\repos\\bot\\tumblr\\tumblr')

from tumblr.bot import Bot

class SubmoduleFoo(Bot):
    def __init__(self):
        super().__init__()
        # ...
    # ...
if __name__ == "__main__":
    SubmoduleFoo()
Run Code Online (Sandbox Code Playgroud)

bot.py 只定义了一个带有一些初始化的空类:

import sys
sys.path.append('C:\\repos\\bot\\tumblr\\tumblr')

class Bot:
    def __init__(self):
        self.settings = dict()
        # ...
Run Code Online (Sandbox Code Playgroud)

如果我从命令行调用这些脚本,它们会起作用:

python C:\path\to\submodule_foo.py
Run Code Online (Sandbox Code Playgroud)

如果我双击我的python submodule_foo.py“脚本”它不起作用。

我认为问题是由继承引起的,并调用了父init

但由于我只是双击它,我不知道如何正确调试它。

我试图包括一个:

with open('codes.txt', 'a') as file:
    file.write("It Works \n")
Run Code Online (Sandbox Code Playgroud)

就在if __name__ == "__main__":声明之后并且不起作用:$

我的PATH变量(在 Windows 10 中)包括c:\python34并且c:\python34\scripts 我还有一个PYHOME指向的env 变量c:\python34

我已经尝试过这个解决方案:Python 脚本停止在 Windows 中双击运行但它对我不起作用。

我还尝试通过 python 解释器创建这些类。并且导入到 tumblr.bot.Bot() 工作正常

我的想法快用完了。

Mup*_*sat 5

由于您的文件输出不起作用,因此可能根本没有启动 python 解释器。在 Windows 资源管理器中右键单击该文件,找到它显示“打开方式”的位置,然后按“更改”按钮,它看起来不正确。

通过键入cmd开始打开 DOS 命令提示符,并尝试在指定和不指定解释器的情况下运行您的脚本。

c:\home>python.exe myscript.py
Run Code Online (Sandbox Code Playgroud)

或者

c:\home>myscript.py
Run Code Online (Sandbox Code Playgroud)

如果 #1 有效而 #2 无效,则表示 Windows 未配置为使用正确的解释器打开 *.py 文件。

要在双击启动脚本时查看输出,可以显示如下错误消息:

#!/usr/bin/env python
import sys
try:
# your code here   
# your code here   
# your code here   

except Exception as e:
    print("\nTHERE WAS AN ERROR PROCESSING YOUR REQUEST:", e, file=sys.stderr)
    input("Press Enter to exit...")
Run Code Online (Sandbox Code Playgroud)

stderr强烈推荐使用该频道,因为默认情况下 Python 会在 latin-1 的 MS 版本中打印到控制台,并且任何 Unicode 字符都会触发编码异常。stderr没有这个限制。