首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么PyCharm中的命令行不识别bash命令?

为什么PyCharm中的命令行不识别bash命令?
EN

Stack Overflow用户
提问于 2020-07-17 16:00:42
回答 2查看 803关注 0票数 1

我试图将一些东西复制到Python项目的剪贴板上。我不能使用模块复制到我的剪贴板,因为一个缺陷与KDE等离子体。我没有试图解决这个问题,而是决定用以下方法解决这个问题:

代码语言:javascript
复制
os.system('echo text | xclip -sel clip')

我得到的回报是

代码语言:javascript
复制
sh: xclip: command not found

在我自己的命令行中安装和工作很好,但是使用Pycharm中的终端。无法识别命令sudo。我不明白为什么它们没有被识别,以及我必须做些什么才能从内置终端访问类似xclip之类的东西。

在我的功能下拉列表中:

代码语言:javascript
复制
$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

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

代码语言:javascript
复制
echo $PATH
/home/danielh/PycharmProjects/DetermineDistances/venv/bin:/app/bin:/usr/bin

sudo也没有被识别,为什么我缺少这些命令?

代码语言:javascript
复制
[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

代码语言:javascript
复制
(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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-17 21:13:10

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

代码语言:javascript
复制
[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
票数 1
EN

Stack Overflow用户

发布于 2020-07-17 23:47:40

在我看到您使用的是Flatpak安装之后,挖得更深了一点。Flatpak有自己的沙箱,所以这实际上是引起问题的原因。

因此,看起来Flatpak创建了自己的/usr/bin,它与“主机”/usr/bin完全无关。真正的/usr/bin是在/var/run/host/usr/bin下安装的(/usr/dev通常都在/var/run/host下)。

所以,这就是xclip的位置。因此,如果要运行xclip,必须首先将其添加到路径中:

代码语言:javascript
复制
os.environ["PATH"] = "/var/run/host:" + os.environ["PATH"]

但是,这还不够,因为xclip还依赖于一个名为LibXmu的共享库,这一点在运行该命令时很明显:

代码语言:javascript
复制
/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下的共享库查找提供另一个环境变量。

代码语言:javascript
复制
os.environ["LD_LIBRARY_PATH"] =  "/var/run/host/usr/lib/x86_64-linux-gnu"

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

代码语言:javascript
复制
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使事情变得更烦人,所以最好避免它;)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62957680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档