Python 双击 Windows 不执行脚本
Python script doesn't execute by doubleclick on Windows
对于这样的项目结构:
/tumblr
/tumblr
/module_foo
__init__.py
submodule_foo.py
/module_bar
__init__.py
submodule_bar.py
__init__.py
bot.py
我正在做类似的事情:
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()
bot.py 只定义了一个带有一些初始化的空 class:
import sys
sys.path.append('C:\repos\bot\tumblr\tumblr')
class Bot:
def __init__(self):
self.settings = dict()
# ...
如果我从命令行调用这些脚本,它们会起作用:
python C:\path\to\submodule_foo.py
如果我双击 python submodule_foo.py
"script" 它不起作用。
我认为问题是继承引起的,调用了parent init
但是因为我只是双击它,所以我不知道如何正确调试它。
我试图包括一个:
with open('codes.txt', 'a') as file:
file.write("It Works \n")
就在 if __name__ == "__main__":
语句之后并且不起作用:$
我的 PATH
变量(在 windows 10 中)包括 c:\python34
和 c:\python34\scripts
我还有一个 PYHOME
env 变量指向 c:\python34
而且我已经尝试过这个解决方案:Python scripts stopped running on double-click in Windows但它对我不起作用。
我还尝试通过 python 解释器创建这些 classes。 tumblr.bot.Bot() 的导入工作正常
我 运行 没有想法。
由于您的文件输出不起作用,因此可能 python 解释器根本没有启动。右键单击 Windows 资源管理器中的文件,找到显示 "opens with" 的位置,然后按按钮 "Change" 它看起来不正确。
在“开始”中键入 cmd
打开 DOS 命令提示符,并尝试 运行 您的脚本,无论是否指定解释器。
c:\home>python.exe myscript.py
或
c:\home>myscript.py
如果#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...")
强烈推荐 stderr
通道,因为默认情况下 Python 在 latin-1 的 MS 版本中打印到控制台,任何 Unicode 字符都会触发编码异常。 stderr
没有这个限制。
对于这样的项目结构:
/tumblr
/tumblr
/module_foo
__init__.py
submodule_foo.py
/module_bar
__init__.py
submodule_bar.py
__init__.py
bot.py
我正在做类似的事情:
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()
bot.py 只定义了一个带有一些初始化的空 class:
import sys
sys.path.append('C:\repos\bot\tumblr\tumblr')
class Bot:
def __init__(self):
self.settings = dict()
# ...
如果我从命令行调用这些脚本,它们会起作用:
python C:\path\to\submodule_foo.py
如果我双击 python submodule_foo.py
"script" 它不起作用。
我认为问题是继承引起的,调用了parent init
但是因为我只是双击它,所以我不知道如何正确调试它。
我试图包括一个:
with open('codes.txt', 'a') as file:
file.write("It Works \n")
就在 if __name__ == "__main__":
语句之后并且不起作用:$
我的 PATH
变量(在 windows 10 中)包括 c:\python34
和 c:\python34\scripts
我还有一个 PYHOME
env 变量指向 c:\python34
而且我已经尝试过这个解决方案:Python scripts stopped running on double-click in Windows但它对我不起作用。
我还尝试通过 python 解释器创建这些 classes。 tumblr.bot.Bot() 的导入工作正常
我 运行 没有想法。
由于您的文件输出不起作用,因此可能 python 解释器根本没有启动。右键单击 Windows 资源管理器中的文件,找到显示 "opens with" 的位置,然后按按钮 "Change" 它看起来不正确。
在“开始”中键入 cmd
打开 DOS 命令提示符,并尝试 运行 您的脚本,无论是否指定解释器。
c:\home>python.exe myscript.py
或
c:\home>myscript.py
如果#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...")
强烈推荐 stderr
通道,因为默认情况下 Python 在 latin-1 的 MS 版本中打印到控制台,任何 Unicode 字符都会触发编码异常。 stderr
没有这个限制。