【问题标题】:Works in terminal but not in VS code适用于终端,但不适用于 VS 代码
【发布时间】:2020-08-03 04:58:56
【问题描述】:

我有一个让我发疯的问题。我有一个 python 脚本,当我在终端 (ubuntu) 中运行它时有效,但在 vscode 中无效。

终端代码就是:

python helper.py

helper.py 如下所示:

from pynput.keyboard import Key, Controller
from pynput.keyboard import Listener

def on_press(key):
    print('{0} pressed'.format(
        key))

def on_release(key):
    print('{0} release'.format(
        key))
    if key == Key.esc:
        # Stop listener
        return False

# Collect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

当我在终端中运行它时,它工作正常,但在 vscode 中它说

Traceback (most recent call last):
  File "/home/paul/Programming/statFit2/helper.py", line 1, in <module>
    from pynput.keyboard import Key, Controller
  File "/home/paul/anaconda3/lib/python3.7/site-packages/pynput/__init__.py", line 40, in <module>
    from . import keyboard
  File "/home/paul/anaconda3/lib/python3.7/site-packages/pynput/keyboard/__init__.py", line 52, in <module>
    from ._xorg import KeyCode, Key, Controller, Listener
  File "/home/paul/anaconda3/lib/python3.7/site-packages/pynput/keyboard/_xorg.py", line 39, in <module>
    from pynput._util.xorg import (
  File "/home/paul/anaconda3/lib/python3.7/site-packages/pynput/_util/xorg.py", line 40, in <module>
    _check()
  File "/home/paul/anaconda3/lib/python3.7/site-packages/pynput/_util/xorg.py", line 38, in _check
    display = Xlib.display.Display()
  File "/home/paul/anaconda3/lib/python3.7/site-packages/Xlib/display.py", line 89, in __init__
    self.display = _BaseDisplay(display)
  File "/home/paul/anaconda3/lib/python3.7/site-packages/Xlib/display.py", line 71, in __init__
    protocol_display.Display.__init__(self, *args, **keys)
  File "/home/paul/anaconda3/lib/python3.7/site-packages/Xlib/protocol/display.py", line 84, in __init__
    name, protocol, host, displayno, screenno = connect.get_display(display)
  File "/home/paul/anaconda3/lib/python3.7/site-packages/Xlib/support/connect.py", line 73, in get_display
    return mod.get_display(display)
  File "/home/paul/anaconda3/lib/python3.7/site-packages/Xlib/support/unix_connect.py", line 76, in get_display
    raise error.DisplayNameError(display)
Xlib.error.DisplayNameError: Bad display name ""

这只是其中一件对我来说真的没有意义并且真的想让我放弃编程的事情。

【问题讨论】:

  • VS Code 的默认解释器与您终端的默认 Python 解释器是否不同?
  • 我怎么能看到这个?我认为这是同一个蟒蛇版本
  • 在 VS 代码中,点击 ctrl + shift + p 并输入 python: select interpreter 看看哪个是默认值。对于 Ubuntu,输入 which python。这些是一样的吗?
  • 谢谢。是的,他们是一样的。在终端中它的/home/paul/anaconda3/bin/python 和在 vscode 中的当前是 ~/anaconda3/bin/python
  • 可能是$DISPLAY 设置不正确。这可以通过在不同的终端中执行echo $DISPLAY 来测试它们的设置。这更像是 Xlib 的事情,而不是编程的事情。所以不要太沮丧;)

标签: python visual-studio-code pynput


【解决方案1】:

我了解到您正在尝试使用 Python 编写脚本,如果您使用终端运行它,它可以工作,但如果您在 VS 编辑器中运行它,它就不起作用!如果这就是你所说的,那么在终端上运行的默认版本可能会有所不同,在 VS 上运行的版本之间可能存在差异,它可能是在终端 python 3 上运行的版本,以及在终端上运行的版本在编辑器中是 python 2。 我更喜欢你尝试在 python 的 spyder 程序上开发 您可以使用以下命令安装它: sudo apt update && sudo apt install spyder && sudo pip install spyder

你需要在启动脚本中添加这一行 如果你输入 python 2 添加“#!/bin/python2” 如果你输入 python 3 添加“#!/bin/python3” 要告诉 bash 你需要运行什么版本的 python 让你继续学习,兄弟

【讨论】:

  • 感谢您的回答。是的,我也使用蜘蛛,它适用于蜘蛛。只是我真的不知道为什么它在 VS Code 中不起作用。即使我使用VSC的内置终端并输入home/paul/anaconda3/bin/python /home/paul/Programming/statFit2/helper.py,它也不起作用现在,如果我在普通的ubuntu终端中准确地输入它,它就可以工作。既然我给解释器提供了确切的路径,它应该总是一样的吗?
  • 不一定相同,因为这一切都与您的外壳及其环境有关。如果您在 Ubuntu 中使用的终端显式设置 DISPLAY,那么这不会延续到 VS Code 中的终端。您可以尝试设置 `"terminal.integrated.inheritEnv": false` 以查看是否可以修复它。至于如何修复它,快速而简单的方法是在您的代码中进行:if not 'DISPLAY' in os.environ: os.environ["DISPLAY"] = ":0".
猜你喜欢
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 1970-01-01
  • 2018-12-03
相关资源
最近更新 更多