为什么PyCharm中的命令行无法识别bash命令?

时间:2020-07-17 16:00:42

标签: python bash pycharm kde manjaro

我正在尝试将某些内容复制到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

2 个答案:

答案 0 :(得分:2)

在我看到您正在使用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

但是,既然一旦阿拉伯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; )。

答案 1 :(得分:1)

我已解决此问题,方法是卸载Flatpak存储库中的PyCharmCE安装并使用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