我无法使用 PyCharm 运行系统调用,也无法弄清楚要更改哪些变量或环境设置。
给定这个简单的脚本:
import os
cmd = 'ifconfig -a'
os.system(cmd)
。在终端的命令行中运行良好,产生以下错误:
sh: ifconfig: command not found
这发生在我尝试运行的任何进程中,例如 CSVSQL、PSQL 等。
我已经尝试过:在命令行显示我的 python 解释器路径,我尝试将它们添加到 PyCharm 解释器路径中,但无济于事。
还有其他几个线程描述了类似的问题,但我似乎没有遇到过一个好的解决方案。
我正在运行Linux Mint 19,尽管这适用于我的Windows安装(PATH输出有很大不同)。
如果这真的很简单,我很抱歉...谢谢!
在 Python 和终端上运行printenv
,并检查PATH
变量。使用os.environ['PATH'] = 'My path'
将其设置为您在终端上看到的内容。
对于未来的问题(我遇到了):
检查它是否是导出的环境变量的一种快速方法是运行os.system("/bin/sh -c "MYCMD"")
,然后在终端中运行相同的"/bin/sh -c "MYCMD""
字符串。如果仍然存在问题,那么它一定是导出(这是可能的问题)。
要解决此问题,请尝试在 python 和终端中printenv
以查看导出列表。您应该会看到差异。格式很简单,因为您可以简单地复制终端printenv
的输出(应该是一系列declare
s),并将其粘贴到python中,以便python将获得相同的变量。然后你的"/bin/sh CMD"调用应该对齐。
包装/bin/sh
是以防它们运行不同的 shell 或具有不同的局部变量。echo $SHELL
可以确认这一点,此时您可以比较set
s和printenv
s,并以相同的方式复制粘贴。包装后,您只需要比较导出,因为这是传递给子进程的内容。
看起来 pycharm 没有从您的个人资料或 rc 获取路径。尝试提供命令的绝对路径。
import os
cmd = '/sbin/ifconfig -a'
os.system(cmd)
您还可以使用以下方法验证您的路径。
print(os.environ['PATH'])
并使用以下内容将您的自定义路径添加到当前环境路径。
os.environ['PATH'] += ':/sbin'