【问题标题】:Why does my commandline within PyCharm not recognize bash commands?为什么我在 PyCharm 中的命令行无法识别 bash 命令?
【发布时间】:2020-11-07 11:29:36
【问题描述】:

我正在尝试将某些内容复制到我的剪贴板中,用于 Python 中的一个项目。由于 KDE Plasma 的错误,我无法使用模块复制到剪贴板。我没有尝试解决这个问题,而是决定解决它:

os.system('echo text | xclip -sel clip')

我得到的错误是

sh: xclip: command not found

Xclip 已安装并且可以在我自己的命令行中正常工作,但使用 Pycharm 中的终端。无法识别命令 sudo。我不明白为什么这些没有被识别,以及我必须做什么才能从内置终端访问像 xclip 这样的东西。


在我的功能下拉列表中:

$PATH
bash: /home/danielh/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/var/lib/flatpak/exports/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin: No such file or directory

在我功能失调的内置终端中:

echo $PATH
/home/danielh/PycharmProjects/DetermineDistances/venv/bin:/app/bin:/usr/bin

sudo pacman 也无法识别,为什么我缺少这些命令?


[danielh@Pomegranate DetermineDistances]$ which pacman
which: no pacman in (/app/bin:/usr/bin)
[danielh@Pomegranate DetermineDistances]$ which xclip
which: no xclip in (/app/bin:/usr/bin)

我已经把clipboard.sh放到了项目目录下,但是即使运行,xclip也找不到。但是,如果我从自己的终端运行它,它就可以正常工作:

subprocess.call('./clipboard.sh') ./clipboard.sh: line 2: xclip: command not found

[danielh@Pomegranate DetermineDistances]$ ./clipboard.sh 工作得很好 [danielh@Pomegranate DetermineDistances]$ which xclip /usr/bin/xclip 也可以


@CrazyCoder 的解决方案似乎没有任何效果。 [danielh@Pomegranate bin]$ sudo /var/lib/flatpak/app/com.jetbrains.PyCharm-Community/current/active/export/bin/com.jetbrains.PyCharm-Community PyCharm 已打开,但我仍然无法访问 pacmanxclip


(venv) [danielh@Pomegranate DetermineDistances]$ strace -e stat which xclip
strace: test_ptrace_get_syscall_info: PTRACE_TRACEME: Operation not permitted
strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted
strace: PTRACE_SETOPTIONS: Operation not permitted
strace: detach: waitpid(157): No child processes
strace: Process 157 detached

【问题讨论】:

  • 听起来像是 PATH 变量的问题,建议您运行 os.system('echo $PATH') 并报告结果 @Straw,xclip 不是内置的 bash,而是二进制文件
  • which pacmanwhich xclip 的结果是什么?
  • 这很奇怪。 strace -e stat which xclip呢?
  • sudo strace -e stat which xclip
  • sudo 没有找到,所以我不能这样做

标签: python bash pycharm kde manjaro


【解决方案1】:

在我看到您使用的是 Flatpak 安装之后,深入挖掘。 Flatpak 有自己的沙盒,所以这实际上是导致问题的原因。

因此,Flatpak 似乎创建了自己的/usr/bin,它与“主机”/usr/bin 完全无关。真正的/usr/bin挂载在/var/run/host/usr/bin下(/usr/dev都挂载在/var/run/host下)。

所以,这就是xclip 所在的位置。所以,如果你想运行xclip,你必须先将它添加到路径中:

os.environ["PATH"] = "/var/run/host:" + os.environ["PATH"]

然而,这还不够,因为xclip 还依赖于一个共享库,称为 LibXmu,在运行带有此修改的命令时很明显:

/var/run/host/usr/bin/xclip: error while loading shared libraries: libXmu.so.6: cannot open shared object file: No such file or directory

但是由于一旦 agian Flatpak 在其/usr/lib 路径下没有真正的/usr/lib,我们必须在/var/run/host/usr/lib 下为共享库查找提供另一个环境变量

os.environ["LD_LIBRARY_PATH"] =  "/var/run/host/usr/lib/x86_64-linux-gnu"

所以,这段代码现在应该可以工作了:

import os
os.environ["LD_LIBRARY_PATH"] =  "/var/run/host/usr/lib/x86_64-linux-gnu"
os.environ["PATH"] = "/var/run/host/usr/bin:" + os.environ["PATH"]
os.system('echo text | xclip -sel clip')

结论,Flatpak 让事情变得更烦人,所以最好避免它 IMO ; )。

【讨论】:

    【解决方案2】:

    我已通过卸载 PyCharmCE 的 Flatpak 存储库安装并使用 Snap 存储库重新安装 PycharmCE 2020.1.3 解决了这个问题。

    [danielh@Pomegranate PycharmProjects]$ whereis xclip
    xclip: /usr/bin/xclip /usr/share/man/man1/xclip.1.gz
    [danielh@Pomegranate PycharmProjects]$ whereis sudo
    sudo: /usr/bin/sudo /usr/lib/sudo /etc/sudo.conf /usr/share/man/man8/sudo.8.gz
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2021-11-12
      • 1970-01-01
      • 2021-11-18
      • 2020-08-15
      • 1970-01-01
      相关资源
      最近更新 更多