我正在使用技巧“python -c'import myscript.py'”对使用'import gtk'的脚本执行语法检查。
执行语法检查时出现以下错误,这意味着gtk模块正在执行X显示的检查,即使此时所做的全部操作都是导入模块。
Traceback (most recent call last):
File "<stdin>", line 15, in ?
File "myscript.py", line 21, in ?
import gtk
File "/usr/src/build/463937-i386/install/usr/lib/python2.3/site-packages/gtk-2.0/gtk/__init__.py", line 37, in ?
RuntimeError: could not open display
执行语法检查时有没有办法避免此错误?
在你问之前 - 我在运行语法检查之前无法设置$ DISPLAY。该检查作为分布式构建系统的一部分在远程服务器上运行。这些服务器没有可用的X显示器。
答案 0 :(得分:3)
用Python导入模块执行他们的代码!
表现良好的模块使用if __name__ == '__main__'
技巧来避免副作用,但它们仍然会失败 - 就像发生在你身上一样。
[顺便说一下,转到ImportError意味着整个文件已经有了正确的语法。]
如果您只是想检查语法,而不是完全运行:
python -m py_compile my_script.py
将检查一个文件(并产生.pyc
作为副作用。)
python -m compileall ./
将以递归方式检查整个目录。
python -c 'compile(open("myscript.py").read(), "myscript.py", "exec")'
避免创建.pyc
。
但请注意,仅仅检查Python中的语法只会捕获很少的错误!导入确实捕获更多,例如拼错的名字。要获得更好的检查,请使用tools like Pychecker / Pyflakes。
答案 1 :(得分:0)
'syntax checking'
到底是什么意思?
你不能使用像pylint这样的工具来检查语法错误吗?
否则:非常丑陋(但可能是黑客):
答案 2 :(得分:0)
如果远程计算机安装了vncserver,则可以运行虚拟服务器并连接到该虚拟服务器。示例说明:
remotemachine $ vncserver -depth 16 -geometry 800x600 :7
New 'X' desktop is remotemachine:7
Starting applications specified in /home/user/.vnc/xstartup
Log file is /home/user/.vnc/userve:7.log
remotemachine $ DISPLAY=:7 python -c 'import myscript.py'
…
remotemachine $ vncserver -kill :7
Killing Xtightvnc process ID 32058
答案 3 :(得分:0)
在你的myscript.py中,你可以这样做
if __name__=="__main__":
import gtk
执行__init__.py
"python -c 'import myscript.py'"
答案 4 :(得分:0)
如果您使用IDLE进行编辑, Alt + X 将检查当前文件的语法而不运行它。