一些常用的screen命令。当使用xshell在远程服务器上跑程序时,本地的网络或者断电后,服务器上的程序也会停止。可以使用screen命令在服务器上新建一个独立的窗口来解决这个问题。
screen内conda环境的配置问题
进入screen,并配置conda环境,验证import的安装包的版本和环境env_name的版本是否一致,不一致就说明conda环境配置冲突(即使界面显示已经进入的该conda环境,但是import的却不是)
screen -S 1
conda activate env_name
python -c "import torch; print(torch.__version__)"
解决方案:
在screen外,先退出conda环境,再进入screen窗口,进入后再进入conda环境
''ctrl+a 松开后 按d''
conda deactivate (必须是deactivate,conda activate会回到默认的conda环境)
screen -r 1
conda activate env_name
python -c "import torch; print(torch.__version__)"
其他错误
错误:
SyntaxError: Non-ASCII character '\xe7' in file test.py on line 131, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
原因:python的默认编码文件是用的ASCII码,无法显示中文
我这里的情况是:在screen外,运行代码没有这个错误,但是在screen里,会报这个错。
进入screen后,需要重新进入Python虚拟环境conda activate envs_name
命令
# 新建screen
screen -S testtemp
# 列出当前所有的screen
screen -ls
输出的格式: (PID).(screen name) (date of screen create) (state: Detached(没有窗口连接) Attached(已有窗口连接))
例如:3733.SS (2020年08月17日 10时54分17秒) (Attached)
# 退出当前screen
''ctrl+a 松开后 按d''
# 退出当前screen,并删除
exit
# 进入某个screen,其中 screen_pid(106674) 通过 screen -ls 查看
screen -r 106674
# 如果该screen的状态是Attached时,-r 命令会失效,此时可用:
screen -rd 106674
# 删除特定的screen(106674)
kill 106674
# 判断当前界面是否在screen里。返回空,就说明不在;否则返回screen的PID
echo $STY