Nyx*_*nyx 20 python windows-7 pythonw python-2.7
运行简单的.py或.pyw python文件会导致python.exe显示在任务管理器下.
python myApp.py
python myApp.pyw
Run Code Online (Sandbox Code Playgroud)
然而,当我们尝试不使用控制台运行,该脚本不会出现跑,也不python.exe或pythonw.exe在任务管理器中出现
pythonw myApp.pyw
pythonw myApp.py
Run Code Online (Sandbox Code Playgroud)
我们如何解决问题?系统运行的是Python 2.7.8 x64.
mkl*_*nt0 27
TL;博士
要进行故障排除,请在调用时使用输出重定向:
pythonw myApp.py 1>stdout.txt 2>stderr.txt
Run Code Online (Sandbox Code Playgroud)这将捕获文件中的stdout输出,例如from print(),in,file stdout.txt和stderr输出(例如来自未处理的异常)stderr.txt; 来自PowerShell,使用
cmd /c pythonw myApp.py 1>stdout.txt 2>stderr.txt).
请注意,重定向stdout的行为实际上可能会使您的脚本再次运行,如果它失败的唯一原因pythonw是使用print(在Python 2.x中 - 见下文).
警告:此输出重定向技术貌似也没有调用时工作*.pyw的脚本直接(如通过将脚本文件路径反对pythonw.exe).如果您知道原因和/或它是否适合您,请告诉我.
将以下内容放在要运行pythonw.exe的任何Python 2.x或3.x脚本的顶部:
import sys, os
if sys.executable.endswith("pythonw.exe"):
sys.stdout = open(os.devnull, "w");
sys.stderr = open(os.path.join(os.getenv("TEMP"), "stderr-"+os.path.basename(sys.argv[0])), "w")
Run Code Online (Sandbox Code Playgroud)
这可以确保在运行脚本时执行以下操作pythonw.exe:
print()调用和显式调用sys.stdout()被有效忽略(是无操作).%TEMP%\stderr-<scriptFileName>; %TEMP%是一个标准的Windows环境变量,指向当前用户的临时文件文件夹.换句话说:使用上面的代码,在脚本在调用时以静默方式失败后检查文件%TEMP%\stderr-<scriptFileName>pythonw.exe.
有关解释,请继续阅读.
在Windows上,pythonw.exe是用于启动GUI /无UI不惜一切的脚本,这意味着标准输入和输出流- ,,sys.stdin 不可用.sys.stdoutsys.stderr
这有两个令人讨厌的副作用:
print() - sys.stdout默认情况下使用哪些目标- 会导致Python 2.x中出现异常.
print()2.x 触发的异常)都会导致脚本以静默方式中止.
sys.stderr默认情况下会出现异常错误消息,这是此方案中不可用的内容.上面的代码修复了这些问题:
将stdout输出发送到空设备,有效地忽略任何输出尝试sys.stdout- 无论是显式还是隐式通过print().
将所有stderr输出发送到临时文件.
Python 2.x和Python 3.x之间的差异:
当一个脚本与运行pythonw.exe, sys.stdin,sys.stdout,和sys.stderr:
sys.stdout或是sys.stderr以下异常:IOError: [Errno 9] Bad file descriptorpythonw.exe与-u(非缓冲输出).print()盲目地尝试sys.stdout(默认情况下),所以它迟早会引发这个例外.None
print()执行功能,无操作(什么都不做),当它发现sys.stdout的None,所以print()默认情况下可以安全使用说明-他们会简单地忽略时运行pythonw.exesys.stdout.write()并sys.stderr.write()仍导致异常.有关更多背景,请参见此处
尝试将该行添加import sys; sys.stderr = open("errlog.txt", "w")到myApp.py. 然后查找errlog.txt回溯或任何其他错误消息。
Jor*_*ley -1
我不确定我是否理解你的问题,但我认为这是你需要知道的
您需要右键单击 py 或 pyw 文件并选择打开方式...找到 python.exe (可能是 C:\Python27\python.exe) .. 选中始终打开的框...现在您可以双击如果你想运行它,请点击它
(通常安装程序会为您设置...)
| 归档时间: |
|
| 查看次数: |
12906 次 |
| 最近记录: |