pycharm远程服务器跑os.system调用python版本问题

本文探讨了PyCharm远程运行程序时出现ImportError的问题,并详细分析了错误原因在于不同Python版本间的包调用差异。作者分享了解决方案,即明确指定Python解释器路径以确保正确加载第三方模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pycharm远程连服务器跑程序,结果老是报错

ImportError: No module named xmltodict

然而我明明已经安装了xmltodict。

通过在各处测试所调用的python版本,发现问题出在这里

os.system('python ' + clean_annotation_path + ' ' + temp_JPEGImages + ' ' + temp_Annotations + ' -r ' + os.path.join(temp, 're'))

在这一句之前,都是使用python3.6,来自我个人的路径,因为我在bashrc里已经做好了设置。

export PATH="/home/wei/miniconda3/bin:$PATH"
alias pip="/home/wei/miniconda3/bin/pip"
alias python="/home/wei/miniconda3/bin/python"
alias python3="/home/wei/miniconda3/bin/python3"

然而这一句调用的却是python2.7,来自系统路径

/usr/bin/python

这样我安装的那些包当然就找不到了。

没有找到原因。在服务器上直接运行python命令是不会搞错的,用pycharm远程运行py文件且文件中执行os.system()来调用python就会调错。

最后只好使用

os.system('/home/wei/miniconda3/bin/python ' + clean_annotation_path + ' ' + temp_JPEGImages + ' ' + temp_Annotations + ' -r ' + os.path.join(temp, 're'))


BTW,获取当前文件所在目录的绝对路径方式如下:

dataset_helper_path = os.path.dirname(os.path.realpath(__file__))  #获取当前文件所在目录的绝对路径

如果用以下语句可能得到相对路径:

dataset_helper_path = os.path.dirname(os.path.realpath(__file__))

### 使用 `os.system` 执行 Windows 命令行操作 在 Python 中,可以通过 `os.system()` 函数执行 Windows 系统的命令行操作。该方法直接调用系统的 shell 来运行指定的命令,并返回命令执行后的退出状态码。 ```python import os # 执行一个简单的CMD命令,例如 'ipconfig' os.system('ipconfig') ``` 由于 Windows 的 CMD 默认使用 GBK 编码,而 PyCharm 或其他 IDE 可能默认使用 UTF-8 编码,这会导致输出中文时出现乱码。为了解决这个问题,可以在执行命令前切换 CMD 的编码模式[^1]: ```python os.system('chcp 65001') # 切换CMD编码为UTF-8 os.system('echo 你好') # 正常显示中文 ``` --- ### 注意事项与限制 `os.system()` 方法虽然简单易用,但在执行多条命令时需要注意子进程的作用域问题。每一条 `os.system()` 调用都会在一个新的子进程中运行,因此如果需要连续执行多个依赖上下文的命令,应使用命令连接符(如 `&` 或 `&&`)将它们放在同一个命令中执行[^2]: ```python os.system('cd C:\\ && dir') # 进入C盘并列出目录内容 ``` 此外,`os.system()` 不适合用于捕获命令的输出结果,因为它不会返回命令的实际输出内容,仅返回退出状态码。若需获取命令输出,建议使用 `subprocess` 模块替代: ```python import subprocess output = subprocess.getoutput('ping www.baidu.com') print(output) ``` --- ### 示例:执行网络诊断命令 以下是一个使用 `os.system()` 执行 `ping` 命令的示例: ```python import os os.system('chcp 65001') # 设置UTF-8编码以避免乱码 os.system('ping www.example.com') ``` 此代码会向 `www.example.com` 发送 ICMP 请求并打印响应结果。 --- ### 总结 `os.system()` 是一个轻量级的方法,适用于不需要捕获输出、也不涉及复杂交互的命令执行场景。然而,对于更复杂的系统命令交互、实时输出处理或跨平台兼容性需求,推荐使用 `subprocess` 模块以获得更强的功能支持和更好的控制能力。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值