python gtk模块在导入时打开显示

时间:2009-12-03 18:35:01

标签: python gtk

我正在使用技巧“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显示器。

5 个答案:

答案 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这样的工具来检查语法错误吗?

否则:非常丑陋(但可能是黑客):

  1. 在你的python脚本中检测X是否存在。
  2. 如果不是=&gt;使用GTK on DirectFramebuffer(不需要X)。您需要从源(some pointers here)在DirectFB(和/或pygtk)上编译GTK。

答案 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

时,不会执行gtk "python -c 'import myscript.py'"

答案 4 :(得分:0)

如果您使用IDLE进行编辑, Alt + X 将检查当前文件的语法而不运行它。